要点は-awakeFromNib
、ペン先内の他のオブジェクトへのすべての接続が確立されていることを確認できるときに、init を実行できるようにすることです。
nib 読み込みインフラストラクチャは、アーカイブ内のすべてのオブジェクトが読み込まれて初期化された後にのみ、nib アーカイブから再作成された各オブジェクトに awakeFromNib メッセージを送信します。オブジェクトが awakeFromNib メッセージを受信すると、すべてのアウトレットとアクション接続がすでに確立されていることが保証されます。
電話することを忘れないでくださいsuper
。
すぐになくなる可能性は低く、多くのコードで使用されている場合は、移行期間が長くなるでしょう。はい、その名前は古い「nib」ファイル形式に由来しますが、このスタックオーバーフローの質問はファイル拡張子の違いを解決します.
要約すると、クラスの内部インスタンス変数を設定しているため、どちらの方法でも機能します。セッターが完全に初期化されているクラスに依存している場合、セッターinit
メソッド ( を含む)内でセッター メソッドを使用するのは安全ではない可能性があることに注意してください (ソース WWDC 2012 ビデオは最新の Objective-C に移行しています)。-initWithCoder
例としては、nib ファイル内の別のオブジェクトを参照するプロパティを設定することがあります。
In UIViewController
subclasses-initWithCoder
は、ストーリーボードからロードするときにのみ呼び出されます。-awakeFromNib
ストーリーボードを使用するかどうかと呼ばれるように、それを使用する方が理にかなっています。
考えられるもう 1 つのパターンは、レイジーゲッターです。
- (NSMutableArray *)articles{
if (_articles){
return _articles;
}
_articles = [[NSMutableArray alloc] init];
return _articles;
}
このアプローチの利点は、配列をさらに設定したい場合に、配列が不要になったときに配列を簡単に破棄できることです。次にプロパティにアクセスすると、新しい配列が再び得られます。