Monthly Archives: 5月 2011

IBOutlet接続オブジェクトの初期化

0
Filed under iOS SDK, Objective-C
Tagged as ,

難解なイントロ

説明が難しいのですが、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を使い始めているのですが、こういうスタンドは欲しくなりますね!机の上に置いておくより絶対良さそう。しかもこれはスタンド自身が収納性に優れている!

デバイスジャパン Apple iPad対応スタンド(Xstand)

デバイスジャパン Apple iPad対応スタンド(Xstand)

定価:¥ 3,980

Amazon価格:¥ 1,320

カテゴリ:エレクトロニクス


↓iPad2に手で書いていると段々限界が見えてくる。やっぱりペンが欲しい!

プリンストンテクノロジー iPad/iPhone/iPod touch専用タッチペン (ブラック) PIP-TP2B

プリンストンテクノロジー iPad/iPhone/iPod touch専用タッチペン (ブラック) PIP-TP2B

定価:¥ 1,580

Amazon価格:¥ 480

カテゴリ:Personal Computers

発売日:2010-07-10


Tombloo for Firefox 4.0.1

0
Filed under Firefoxアドオン
Tagged as ,

Firefox ブラウザ無料ダウンロード

Firefox 4.0.1を入れてみたら、いくつかのアドオンが使えなくなりました。

まぁ、そのほとんどは大して問題ないのですが、Tomblooだけはちょっと何とかしたかったので、インストールしたので、その手順をメモしておきます。

1. githubからxpiファイルをダウンロードする

最新のtomblooアドオンはgithub内( https://github.com/to/tombloo )からダウンロードします。
ブラウザでソース内のtombloo.xpiのページ( https://github.com/to/tombloo/blob/master/tombloo.xpi )を開き、[raw]リンクをクリックします。
すると、保存確認ダイアログが出るので、適当な場所へ保存します。

2. アドオンマネージャでインストール

「ツール」メニューの「アドオン」でアドオンマネージャが開きます。
その上部にあるプルダウンメニューから、「ファイルからアドオンをインストール…」という項目を選択し、先ほどダウンロードしたxpiファイルを選択します。

これで完了!

3.xで使っていたときの設定とか引き継がれていましたので、問題なく使えます。


[AD]

↓一概にオフィスと言っても、その目的がいろいろあると思うのですが、それでも気になる一冊。

仕事するのにオフィスはいらない (光文社新書)

著者/訳者:佐々木 俊尚

出版社:光文社( 2009-07-16 )

定価:¥ 798

Amazon価格:¥ 798

新書 ( 248 ページ )

ISBN-10 : 4334035159

ISBN-13 : 9784334035150


↓評価高いですね!次に読んでみようかな。

ウェブを変える10の破壊的トレンド

著者/訳者:渡辺 弘美

出版社:ソフトバンククリエイティブ( 2007-12-22 )

定価:¥ 1,680

Amazon価格:¥ 1,680

単行本 ( 224 ページ )

ISBN-10 : 4797346442

ISBN-13 : 9784797346442


↓最近買ったiPad2に付ける保護フィルム、かなり汚れに強いらしい!子どものいたずら対策という意味でもこれぐらいいいものがいいかもしれない。

iPad 3rd/2 高防汚撥水・低反射 PRO GUARD ARSH HD Professional Anti-Reflection Super Hydrophobic / PGARSH-IPAD2R

iPad 3rd/2 高防汚撥水・低反射 PRO GUARD ARSH HD Professional Anti-Reflection Super Hydrophobic / PGARSH-IPAD2R

定価:¥ 2,400

Amazon価格:¥ 1,680

カテゴリ:エレクトロニクス