2010-11-22 15 views
1

私はうまく動作しますが、私はInstrumentsでリークをテストしていましたが、UIBarButtonContentのリークを見つけてきました。iPhone SDK UIBarButtonメモリリーク

 UIButton *searchbutton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[searchbutton setImage:[UIImage imageNamed:@"searchbutton.png"] forState:UIControlStateNormal]; 
[searchbutton addTarget:self action:@selector(search) forControlEvents:UIControlEventTouchUpInside]; 
[searchbutton setFrame:CGRectMake(0, 0, 29,29)]; 
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:searchbutton]; 

アム私はどこでも検索]またはself.navigationItem.rightBarButtonItemをリリースすることになって。

いくつかの助けが素晴らしいでしょう。あなたのUIBarButtonItemを解放する必要が

乾杯

答えて

7

self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:searchbutton] autorelease]; 
+0

@iamsmug - rightBarButtonItemのドキュメントを見ると、 '@property(nonatomic、retain)UIBarButtonItem * rightBarButtonItem'という項目が保持されます。あなたがそれを割り当てたので、それをリリース/自動解放する必要もあります。そうしないと、保持カウントは2になり、メモリリークが発生します。 –

0

あなたはそこアロケーションを持ってUIBarButtonItem参照を解放する必要があります。

0

あなたが割り当てたときはいつでも、リリースする責任があります。最終行の直後にリリースすると、コード内で何が起こるのか不明です。問題が発生した場合は、代わりに自動解放を試すことができます。

+0

私がUIBarButtonItemアナライザをリリースした場合、 ''リリース 'メッセージがクラス' UIBarButtonItem 'のインスタンスに送信されるべきであり、直接' – iamsmug

+0

iamsungである場合、UIBarButtonItemのリリースを呼び出すことはできません。作成したUIBarButtonItem。作成している方法では、アクセスできるインスタンスへのポインタは決してありません。私の答えに示されているように、これに対処するためにautoreleaseを使用することも、rightBarButtonItemに代入する場所とは別の行に独自のインスタンスを作成することもできます。 – GendoIkari

+0

ええ、ありがとう、私は今ソートされています。 – iamsmug