アナリティクス

2011年6月24日金曜日

object release

iPhoneでジェスチャーを使ったプログラムを作ってたら結構ハマった。
[hogehoge release] と書くと
"Automatic Reference Counting forbids explicit message send of 'release'"

うん、なんの事やらさっぱり。

ヘルプの参照からダウンロードした SimpleGestureRecognizers のプロジェクトだと

recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapFrom:)];
[self.view addGestureRecognizer:recognizer];
self.tapRecognizer = (UITapGestureRecognizer *)recognizer;
recognizer.delegate = self;
[recognizer release];


エディタ上でも怒られないし、動きもバッチリ。
でも自分のところにソースを持ってくると怒られる。
まあ、ベータのSDK使ってるわ、プロジェクトの構造がそもそも違うわで何か理由があるんでしょう。
で、ソースを見ていて気がついた。
なんで addGestureRecognizer で割り当てた後に delegate を設定しているのかと。
しかも解放するんだから順序逆じゃない?

などと素人ながらに推測して入れ替えてみた。

recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapFrom:)];
self.tapRecognizer = (UITapGestureRecognizer *)recognizer;
recognizer.delegate = self;
[self.view addGestureRecognizer:recognizer];


うん、動いた。
[iOS5] Automatic Reference Counting (ARC)
読めませんが何か?
あるんだろうな、やっぱり。

メモリどうなってるんだろ?
ヤバい気がする。

.....
投稿して20分後 'Use Storyboard'に気づいた。
もういい、どうせ勉強なんだしこのまま逝く。

0 件のコメント:

コメントを投稿