2011-12-09 25 views
4

私はiTunesでスタンフォード・アイフォーン・デベロッパーの講義を行い、講義5でこれを実行しました。 デバイスの回転時に確実に再描画を実行しようとしています。 私はこれに関連する2つの質問があります。awakeFromNib、initwithFrameの使い方を説明してください

  1. awakeFromNibは、コードの残りの部分で、このメソッドへの呼び出しがないものですが、どのようにそれがトリガされましたの?
  2. initwithFrameの内部のコードは何ですか?

ありがとうございます。

-(void)setup 
{ 
     self.contentMode = UIViewContentModeRedraw; 
} 

-(void)awakeFromNib 
{ 
    [self setup]; 
} 

-(id)initWithFrame:(CGRect)frame 
{ 
    self=[super initWithFrame:frame]; 
    if (self) { 
     [self setup]; 
    } 
    return self; 
} 
+1

この質問にはQuoraでいくつかの回答があります:[ビュー(またはサブビュー)がペン先からロードされたときにはどうなりますか?](http://www.quora.com/Cocoa-API/What-exactly-happens -in-a-view-or-subview-of-a-nib)と[initWithCoder:、initWithNibName:とawakeFromNibの違いは何ですか?](http://www.quora.com/Cocoa -API/initWithCoder-initWithNibNameとawakeFromNibの違いは何ですか? –

答えて

0

まず、initWitFrameはあなたが与えられた長方形のスペースで CGRect座標位置であるを使用して、これまで何を初期化します。 CGRectMakeで読む。基本的な考え方は、それはあなたのペン先の読み込みを完了したときにNSBundleによって呼び出されthis

16

awakeFromNibをチェック疑問、あなたの後半CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height)

です。実際には、ビューを初期化するときに、コードがペン先からロードされたか、実行時に作成されたかに応じて、2つの異なるコードパスがあります。ペン先からロードされている場合は、ローディングの一部がinitWithCoder:を呼び出して初期化され、その後すべてのアウトレットが接続された後にawakeFromNibが呼び出されます。プログラムでビューを作成する場合は、代わりにinitWithFrame:を使用して初期化します(およびawakeFromNibはペン先からロードされていないため呼び出されません)。

+0

ありがとうございます。 awakeFromNibについてはっきりしています。自己についてはどうですか= ...自己は何ですか?スーパーとは何ですか?誰がスーパーにいるの? –

+1

selfは現在のオブジェクトへのポインタです(非静的メソッドごとに暗黙的に定義されています)。 superでは、オブジェクトのスーパークラスの現在のメソッドの実装を呼び出すことができます。 'self = [super init ...]'はスーパークラスの初期化子を呼び出す方法(異なるオブジェクトを返す可能性があるため)のための規則です。これらはObjective-Cとオブジェクト指向プログラミングの基本的な概念ですが、元の質問の範囲を超えて公正なビットです。 – Tony

関連する問題