0

以下を自動リリースできますか?

self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:backButton] autorelease];

それは機能し、私が受け取っていたアナライザーの警告を削除します。そうでない場合は、どうすれば正しくリリースできますか。

助けてくれてありがとう

4

3 に答える 3

1

これは正しい方法です(ただし、現在の正しい方法はARCを使用することです)。

(非ARC環境で)受け入れられる代替手段は次のとおりです。

UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithCustomView:backButton];
self.navigationItem.leftBarButtonItem = barButton;
[barButton release];

NavigationItemのセッターはボタン自体を保持するため、alloc / initによって返されたオブジェクトは、説明されている方法の1つで保持カウントのバランスを取るために解放する必要があります(alloc /initはretaincount1のオブジェクトを返し、セッターはそれに+1を追加します)。

これは絶対にお勧めしません

[self.navigationItem.leftBarButtonItem release];
于 2012-10-18T14:41:35.177 に答える
1

それは正しいです、またあなたはこれをすることができます

UIBarButtonItem *item = [[[UIBarButtonItem alloc] initWithCustomView:backButton];
self.navigationItem.leftBarButtonItem = item;
[item release];
于 2012-10-18T14:43:53.710 に答える
1

正解です。

leftBarButtonItem は UIBarButtonItem を保持するプロパティなので、良いアプローチです。

autorelease メッセージがないと、メモリ リークが発生します。

于 2012-10-18T14:42:21.470 に答える