-awakeFromNib
のポイントは、あなたがペン先の他のオブジェクトへのすべての接続が確立されていることを確認することができたときには、initのものを行うことができるということです。
ニブローディング・インフラストラクチャは、ペン先のアーカイブから再作成各 オブジェクトにawakeFromNibメッセージを送信するが、 アーカイブ内のすべてのオブジェクトがロードされ、初期化された後にのみ。オブジェクトが awakeFromNibメッセージを受信すると、すべてのコンセントと アクション接続が既に確立されていることが保証されます。
super
を忘れてはいけません。
すぐには外に出ることはまずありません。コードがあまりにも長すぎると、移行期間が長くなることがあります。はい、その名前は古い "nib"ファイル形式に由来しますが、this stack overflow questionはファイル拡張子の違いを解消します。
要約すると、クラスの内部インスタンス変数を設定しているので、どちらの方法でも機能します。 init
のメソッド(-initWithCoder
を含む)では、セッターがクラスを完全に初期化することに頼っている場合(WWDC 2012のビデオソースが現代のobjective-cに移行している場合)にセッターメソッドを使用することは安全でない場合があります。たとえば、nibファイル内の別のオブジェクトを参照するプロパティを設定する例があります。
UIViewController
サブクラス-initWithCoder
は、ストーリーボードからロードするときにのみ呼び出されます。あなたがストーリーボードを使用するかどうかにかかわらず、-awakeFromNib
が呼び出されるかどうかは、それを使用する方がより合理的かもしれません。あなたが考えることができ
もう一つのパターンは、怠惰なゲッターである:
-(NSMutableArray *)articles{
if (_articles){
return _articles;
}
_articles = [[NSMutableArray alloc] init];
return _articles;
}
このアプローチの利点は、アレイに、さらにセットアップをやってみたかった場合にはそうでないときに簡単に配列を破棄することができるということですもうそれを必要とし、次回に新しい物件を持っている物件にアクセスするときに。
素晴らしいですが、 '-initWithCoder:'はUIViewControllerで呼び出されません。 – CodaFi
ストーリーボードからインスタンス化されたUIViewControllerサブクラスの 'initWithCoder'メソッドにブレークポイントを設定し、デバッガがブレークポイントにヒットしました。 [The docs](http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ViewLoadingandUnloading/ViewLoadingandUnloading.html#//apple_ref/doc/uid/TP40007457-CH10)はこの動作を確認します。 – Jeff
どちらの方法でも、ストーリーボードからロードするときに '-awakeFromNib'も得られます。 – jackslash