0

いくつかの例に基づいて(主にAaronの本で)、オーバーライドされた-initが起動時に何らかの形で呼び出されるという考えがありました。自分で試してみたところ、うまくいきませんでした。

試してみると、-initを使用してクラスFooを作成しましたが、Xcodeが提供するNSObjectのProjectAppDelegateクラスには何も含まれず、IBもありません。起動時になんとか呼び出されると思っていました。

何も起こらなかった。起動時に私の-initを呼び出さなかったので、何もしなかったと思います。ProjectAppDelegateから-initの呼び出しを追加すると、正しく実行されました。

なぜ例の-initメソッドが起動時に実行されるのか疑問に思っていますが、私の場合は実行されませんか?

4

2 に答える 2

2

クラスのinitメソッドは、オブジェクトがインスタンス化されるときに呼び出されます。つまり、オブジェクトが作成されます。Fooクラスは通常、次のようにインスタンス化されます。

Foo *myFoo = [[Foo alloc] init];

その時点の前は、クラスの説明はまさにその説明です。この行をアプリデリゲートのapplication:didFinishLaunchingWithOptionsメソッドに入れると、実際に初期化され、その時点でmyFooを使用して何かを行うことができます。

于 2010-12-23T05:29:43.223 に答える
0

initは、オブジェクトを初期化するメソッドの従来の名前です。たとえば、を使用してNSMutableArrayを作成します[[NSMutableArray alloc] init]。起動時に作成されたオブジェクトに対してのみ起動時に呼び出されます。プログラムの起動時に実行するコードがある場合は、それをアプリケーションデリゲートのapplicationDidFinishLaunchingメソッドに配置します。

于 2010-12-23T05:55:22.087 に答える