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];发布于 2011-08-25 16:13:31
您可以在设置cell.accessoryView后立即释放交换机。这两个代码片段之间没有太大的区别,除了通常建议您应该尽可能显式地释放内存。Autorelease通常在其他情况下使用,例如当您必须从方法中返回值时。
发布于 2011-08-25 16:12:51
出于这个问题的目的,它们都做了同样的事情。它们之间真的没有区别。
在内存管理规则方面,调用autorelease可以被认为与调用release做同样的事情-它实际上是一个延迟释放调用。你基本上是在说,“请在将来的某个时候释放这个对象”。当然,在您的示例中,调用[switchView release]只会减少保留计数,而不是完全释放对象,因为您已经通过将其设置为单元格的附件视图来保留它。
这里有一个类似的例子来处理优缺点(或缺乏):
你可以在这里阅读苹果关于自动释放池的指南和文档:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html%23//apple_ref/doc/uid/20000047-CJBFBEDI
https://stackoverflow.com/questions/7186865
复制相似问题