2009年09月14日

Objective-C プログラミングの第 1 歩

スクリーンショット
iPhone や Mac OS X のアプリは Objective-C というプログラミング言語で作るのだけど、やっぱり慣れない言語というのは、暗黙のルールがわからず苦労する。

とくにわかりづらいのが alloc/retain と release の関係。

本を読んで、その動きは理解できるのだが、それがどのように運用されているのかが全く実感がないので、ちょっと実験してみた。


@interface Car : NSObject {
NSString *name;
}


@implementation Car
@synthesize name;

- (void)dealloc {
[super dealloc];
}


というクラスを作ってみて、この dealloc メソッドがどんなタイミングで呼ばれるのかデバッグしてみた。


Car *car = [[Car alloc] init];
[car release];


これで呼ばれるのは当たり前なので、


NSMutableArray *carList = [[NSMutableArray] alloc] init];
Car *car = [[Car alloc] init];
[carList addObject:car];
[car release];
[carList release];


というのを作ってみた。

これで、実際に Car のインスタンスがなくなるのは、


[car release];


ではなく、


[carList release];


の実行時だったので、NSMutableArray は addObject のときに retain をしていて、release のときに各アイテムを release してるということがわかったのだ。

なるほど。

Objective-C (というか Cocoa か?)のコレクションでは、アイテムの破棄はコレクションに任せて良いというのがスタンスらしい。


とまあ、慣れるまでは挙動を確認しながらじゃないとコーディングできないのがつらいところだな。

ってこれって当たり前なのかな・・?

Java のガベージコレクションに慣れちゃうと、メモリ管理の「当たり前」がわからなくなってしまうのがツライ。
posted by さわしげ at 20:16| Comment(0) | TrackBack(0) | Mac/iPhone
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/32126433
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック