アーカイブ

2009 年 9 月 のアーカイブ

retain, release, autoreleaseについて考える

2009 年 9 月 10 日 コメントはありません

Objective-C のコードを書いていると、理解しているはずなのに、ときどきわからなくなる。

そう、retain、release、autorelease の3兄弟だ。

この例はとってもシンプル。何をしたいのか理解できないが。

- (void) hoge: (id)obj {
    UIView *aView = [[UIView alloc] initWithFrame:CGRectZero];
    [myView addSubView:aView];
    [self hoge:obj];
}

どうやら UIView のインスタンスを作って、myView に追加したいらしい。

だけど、このコードだと、aViewがメモリリークする。

2行目で、aViewのretainCountが1になる。
3行目で、myViewがaViewを使うことになるので、aViewのretainCountが2になる。
そして、このスコープを抜ける・・・aViewのretainCountは2のまま。

myView が release されると aView の retainCount は1になる。ゼロにならない。

だからこのように書くのがいい。

- (void) hoge: (id)obj {
    UIView *aView = [[UIView alloc] initWithFrame:CGRectZero];
    [myView addSubView:aView];
    [aView release];    // この後、aViewは使わないからreleaseする
    [self hoge:obj];
}

もしくは aView 生成時に autorelease しておく。

- (void) hoge: (id)obj {
    UIView *aView = [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
    [myView addSubView:aView];
    [self hoge:obj];
    // aView は relase 予約済みなので気にしなくていい。
}

あ、retain について触れてなかった。

カテゴリー: Objective-C タグ:

Spotlight を使っていますか?

2009 年 9 月 9 日 コメントはありません

spotlight1Spotlight を使っていますか?

Snow Leopard 以前からある超便利な機能です。

Macを道具として使っている場合、Macの中のツールを使いたいと思うはず。

そのとき、まず頭の中でアプリケーション名を思い浮かべて、Finderを開いて、アプリケーションフォルダを開いて・・・マウスでダブルクリック。

それはもう無駄なアクションです。

今すぐFTPを使いたい!そうだ!「Cyberduck」の出番だ!

その瞬間、あなたの左手は[Control]キーと[スペース]キーを同時押し(小指と親指)しています。その次にあなたのやることはキーボードから「Cyb」と入力するだけです。

もしかするとことえりが「ひらがな」入力になっているかもしれません。
そんなときは[英数]キーをそっと触っておきましょう。

すると「Spotlight」が瞬時に「Cyberduck」を探し出してくれるので、あとは右手で[return]lキーを軽く触るだけです。

この動作でファイルやメール、音楽ファイルまで探し出すことができます。

ぜひマスターして、スマートなMacユーザーになりましょう!

カテゴリー: Mac タグ: