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];
答案 0 :(得分:0)
出于这个问题的目的,他们都做同样的事情。它们之间确实没有区别。
调用autorelease
可以被认为与在内存管理规则方面调用release
做同样的事情 - 它实际上是一个延迟释放调用。你基本上是在说,“请在将来的某个时候发布这个对象”。当然,在您的示例中,调用[switchView 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
,例如,当您必须从方法返回值时。