6

クラスに init メソッドを実装したくない場合、および NSObject の init は初期化なしでオブジェクトのインスタンスを返すだけであることを念頭に置いて、alloc でインスタンスを既に取得している場合、init を呼び出す意味がわかりません。 . 試してみましたが、うまくいきますが、将来問題が発生しないかどうかはわかりません。

myClass *newObject = [myClass alloc];

それ以外の:

myClass *newObject = [[myClass alloc] init];

どうもありがとう。

4

4 に答える 4

17

いいえ、呼び出すだけでallocは正しくありません。allocオブジェクトのすべてのインスタンス変数をゼロにしてから、initすべてまたは一部のインスタンス変数をデフォルト値に設定する機会があります。一部のクラスは、initメソッドを使用して別のインスタンスを作成し、割り当てたインスタンスの代わりにそのインスタンスを返します。

多くのクラスは、メソッドが呼び出されることを想定しており、init呼び出さないとクラッシュする可能性がありますinitNSObjectから直接継承し、インスタンス変数の初期化を必要としないカスタム クラスについて話している場合は、うまくいくかもしれません[myClass alloc]が、それは間違いなく良いプログラミング スタイルではありません。

于 2010-11-03T10:26:51.797 に答える
2

それは良い考えではないと思います。
Cocoa のデザイン パターン、特に「2 段階の作成」を読む

この記事を読むこともできます http://www.informit.com/articles/article.aspx?p=1398610

于 2010-11-03T10:31:03.690 に答える
0

「-(id)init」を実装しなくても、メソッドに送信したのと同じ値を返すNSObjectのinitメソッドを呼び出すため、それほど重要ではないと思います。ただし、インスタンス変数を設定するために独自のinitメソッドを作成することをお勧めします。

于 2010-11-03T11:52:12.117 に答える