我必须发布accessoryView吗?

时间:2011-08-25 07:57:08

标签: iphone

UISwitch *switchView = [[UISwitch alloc] initWithFrame:CGRectZero];
cell.accessoryView = switchView;
[switchView adTarget:selfaction:@selector(switchChanged:)forControlEvents:UIControlEventValueChanged];
[switchView release];

我在tableView中分配了切换视图:cellForRowAtIndexPath:。 我是否必须在dealloc中发布cell.accessoryView?

这不比上面好吗?

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

2 个答案:

答案 0 :(得分:0)

出于这个问题的目的,他们都做同样的事情。它们之间确实没有区别。

调用autorelease可以被认为与在内存管理规则方面调用release做同样的事情 - 它实际上是一个延迟释放调用。你基本上是在说,“请在将来的某个时候发布这个对象”。当然,在您的示例中,调用[switchView release]只会减少保留计数,而不是完全释放对象,因为您通过将其设置为单元格的附件视图来保留它。

这里有一个类似的例子来处理利弊(或缺乏):

Autorelease vs. Release

您可以在此处阅读Apple关于自动释放池的指南和文档: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html%23//apple_ref/doc/uid/20000047-CJBFBEDI

答案 1 :(得分:0)

您可以在设置cell.accessoryView后立即释放开关。两个片段之间没有太大区别,除了通常建议您应该在任何地方明确释放内存。通常使用Autorelease,例如,当您必须从方法返回值时。