2011-08-25 96 views
1
UISwitch *switchView = [[UISwitch alloc] initWithFrame:CGRectZero]; 
cell.accessoryView = switchView; 
[switchView adTarget:selfaction:@selector(switchChanged:)forControlEvents:UIControlEventValueChanged]; 
[switchView release]; 

我在tableView:cellForRowAtIndexPath:中分配了切換視圖。 我是否必須在dealloc中釋放cell.accessoryView?我必須發佈accessoryView嗎?

這不比上面好嗎?

cell.accessoryView = [[[UISwitch alloc] initWithFrame:CGRectZero]autorelease]; 

回答

0

您可以在設置cell.accessoryView後立即釋放您的交換機。這兩個片段之間沒有太大區別,但通常建議您應該儘可能明確地釋放內存。一般情況下使用Autorelease,例如當您必須從方法返回值時。

+0

那麼,我是否必須在dealloc中釋放像這樣的[cell.accessoryView release]或不? – user698200

+0

不會。當單元格被釋放時,它將自行釋放。 – Akshay

0

對於這個問題,他們都做同樣的事情。他們之間真的沒有區別。

調用autorelease可以被認爲是按照內存管理規則調用release - 它實際上是一個延遲釋放調用。你基本上是說,「請在將來某個時候釋放這個對象」。當然,在你的例子中調用[switchView release]只會減少保留計數,不能完全釋放對象,因爲你通過將它保存爲單元的附屬視圖來保留它。

有是與優點/缺點(或缺乏)涉及一個類似的例子在這裏:

Autorelease vs. Release

你可以閱讀蘋果的指導方針,並在這裏自動釋放池的文檔: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html%23//apple_ref/doc/uid/20000047-CJBFBEDI