
難解なイントロ
説明が難しいのですが、Xcode4のリソースエディタ(旧Interface Builder)で配置したオブジェクトをまとめたUIViewを、オリジナルUIViewの派生クラスインスタンスとして設定した場合、その初期化について、どういうメソッドがどういうタイミングで呼ばれるのか分からなかったので調べてみることにしました。
うーん、分かりにくいですね。
簡単な説明にトライしてみます!
分かりやすいイントロ
リソースはほとんどプログラムでも生成できるのですが、やっぱりリソースエディタで配置したほうがやりやすいものとかあります。
そういうものをまとめたUIViewについて、たとえばButtonsとかいう独自クラスをつくってみたりすることがあります。
1 2 3 4 5 6 | @interface Buttons : UIView{ IBOutlet UILabel* label; IBOutlet UIButton* bt1; IBOutlet UIButton* bt2; IBOutlet UIButton* bt3; } |
で、それをリソースエディタで配置したリソースに接続したとします。
1 2 3 | @interface ButtonsContainer : UIView{ IBOutlet Buttons* buttons; } |
で、Buttonsのクラスの初期化をしたい場合、どこのメソッドで描くべきなのか?ということなのです。
初期化の流れ
いきなり結論ですが、初期化メソッドは、
- (id) initWithCoder:(NSCoder*)aDecoder;
が、呼ばれ、その後に、
- (void)awakeFromNib;
が呼ばれます。
ちなみに、setFrameも呼ばれるので、そこに挿し込むのもいいかもしれません。
initメソッドや、initWithFrameは呼ばれないので注意が必要です。
初期化関連メソッドの呼ばれる順番
initWithCoderは次のような実装になると思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | @implementation Buttons - (id) initWithCoder:(NSCoder*)aDecoder{ if( (self=[super initWithCoder:aDecoder]) ){ // 初期化. NSLog(@"2"); } return self; } - (void)setFrame:(CGRect)frame{ [super setFrame:frame]; NSLog(@"1"); } - (void)awakeFromNib{ NSLog(@"3"); } @end |
setFrameは、[super initWithCoder:]から呼ばれるので最初に呼ばれるのです。
基本的な初期化が終わったら、awakeFromNibが呼ばれる、という順番ですね。
上記コードに挿入してあるNSLogはその数字を順番に出力するはずです。
考察
initではなく、initWithFrameでもなく、initWithCoderが呼ばれるので、シリアライズされているリソースがデシリアライズされていることが分かります。
今まで、(Interface Builderなどの)リソースエディタで作られたリソースをどうやって保持しているか疑問だったのですが、これでいろいろ解決しました。
ちなみに、awakeFromNibは、NSObjectにカテゴリで追加されている機能なので、普通にリファレンスを見ていても出てきません。
[AD]
↓エンジニア的読み物として今一番読みたい一冊。
エンジニアとしての生き方 IT技術者たちよ、世界へ出よう! (インプレス選書)
著者/訳者:中島 聡
出版社:インプレスジャパン( 2011-03-11 )
定価:¥ 1,680
Amazon価格:¥ 1,680
単行本(ソフトカバー) ( 272 ページ )
ISBN-10 : 4844329944
ISBN-13 : 9784844329947
↓これは良書の予感!アルゴリズムをリファレンスとしてまとめるというのがいい!
著者/訳者:George T. Heineman Gary Pollice Stanley Selkow
出版社:オライリージャパン( 2010-04-26 )
定価:¥ 3,360
Amazon価格:¥ 3,360
単行本(ソフトカバー) ( 396 ページ )
ISBN-10 : 4873114284
ISBN-13 : 9784873114286
↓上記アルゴリズムクイックリファレンスを見て連想したのはこの名著。もちろん私も持っていますし、プログラマは必携です!
C言語による最新アルゴリズム事典 (ソフトウェアテクノロジー)
著者/訳者:奥村 晴彦
出版社:技術評論社( 1991-03 )
定価:¥ 2,447
Amazon価格:¥ 2,447
単行本 ( 443 ページ )
ISBN-10 : 4874084141
ISBN-13 : 9784874084144
↓iPad2を使い始めているのですが、こういうスタンドは欲しくなりますね!机の上に置いておくより絶対良さそう。しかもこれはスタンド自身が収納性に優れている!
↓iPad2に手で書いていると段々限界が見えてくる。やっぱりペンが欲しい!
プリンストンテクノロジー iPad/iPhone/iPod touch専用タッチペン (ブラック) PIP-TP2B
定価:¥ 1,580
Amazon価格:¥ 798
カテゴリ:エレクトロニクス
発売日:2010-07-10


















