2011-08-25 95 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