initWithFrameとinitWithCoderの違い
- initWithFrameは、code上でobjectを作る時に呼ばれる
- initWithCoderは、interface builder(storyboardやnibファイルなど)からobjectを作るときに呼ばれる
initWithCoderとawakeFromNibの違い
- initWithCoderでは、IBOutletやIBActionはロードされていない、awakeFromNibはロードされた後に呼び出される
使い方
- interface builder(storyboard)使ってて、なにも考えず使いたいならawakeFromNibを使うといいのでは
- initWithFrameとinitWithCorder両方呼び出す可能性があるviewの場合は、initWithCorderで書くこととawakeFromNibで書く内容を分けて書く必要がある。
- (void)awakeFromNib
{
[super awakeFromNib];
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self setup];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
if ((self = [super initWithCoder:aDecoder])) {
[self setup];
}
return self;
}
- (void)setup
{
}
メソッドの詳細
- initWithFrameはUIView、クラス
- initWithCoderはNSCoding、プロトコル
- awakeFromNibはNSNibAwaking、プロトコル
参考
- initWithCoderとinitWithNibName:bundle:とawakeFromNibの違いについて http://www.quora.com/Cocoa-API/What-is-the-difference-between-initWithCoder-initWithNibName-and-awakeFromNib