2011-02-04 25 views
6

我已將UIGestureRecognizer附加到UIView。在dealloc期間釋放它的責任是誰的?我是否在dealloc中負責釋放UIView的gestureRecognizers?

具體做法是:

UITapGestureRecognizer *t = 
[[UITapGestureRecognizer alloc] initWithTarget:self.view action:@selector(tapHandler:)]; 

[self.view addGestureRecognizer:t]; 
[t release]; 

所以,self.view目前擁有gestureRecognizer的唯一保留。

更新 我應該更清楚。我的問題與視圖dealloc方法有關。當視圖被釋放時,視圖的超類是否處理gestureRecognizer的釋放。我目前認爲是這樣。

回答

1

經驗法則是,只要您致電alloc,newcopy,即可致電release

由於您調用了alloc,因此您的代碼不會過度釋放或泄漏任何內容。

雖然你可以自動釋放你的手勢識別,我不因爲明確地釋放對象,如有可能,是更好的內存管理。 (自動釋放的對象直到自動釋放池被耗盡時纔會釋放。)

2

您的代碼是正確的。

視圖將手勢識別器的所有權與[self.view addGestureRecognizer:t]

您可以通過自動釋放t當你創建它整理代碼:

UITapGestureRecognizer *t = [[[UITapGestureRecognizer alloc] initWithTarget:self.view action:@selector(tapHandler:)] autorelease]; 
[self.view addGestureRecognizer:t]; 

這將意味着t各種所有制在一個地方進行處理從而減少了如果代碼被修飾的引入問題的潛力。

+0

對所有對象調用autorelease而不是自己釋放它們不是一種好習慣。 – Tieme 2012-09-20 11:05:18

相關問題