2010-11-22 33 views
1

我一直在寫一個工作正常,但我用儀器測試泄漏並遇到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]; 

我是否應該在任何地方發佈searchButton或self.navigationItem.rightBarButtonItem。

有些幫助會很大。

乾杯

回答

7

你需要釋放你的UIBarButtonItem:

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

@iamsmug - 如果你看看rightBarButtonItem的文檔,它會說:'@property(nonatomic,retain)UIBarButtonItem * rightBarButtonItem`這意味着它將保留該項目。因爲你放棄了它,所以你還需要釋放/自動釋放它,否則保留計數將是2,並且你將有內存泄漏。 – 2010-11-22 19:28:42

0

你需要釋放UIBarButtonItem參考你的alloc那裏。

0

每當你分配你負責釋放。如果您在最後一行之後立即發佈,不確定在代碼中發生了什麼,如果您發現問題,則可以嘗試使用autorelease。

+0

如果我釋放UIBarButtonItem分析器說''釋放'消息應該發送到'UIBarButtonItem'類的實例,而不是直接類' – iamsmug 2010-11-22 18:49:53