【问题标题】:Do I have to release accessoryView?我必须释放附件视图吗?
【发布时间】:2011-08-25 07:57:08
【问题描述】:
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];

【问题讨论】:

    标签: iphone


    【解决方案1】:

    您可以在设置cell.accessoryView 后立即释放您的开关。 2 个 sn-ps 之间没有太大区别,除了通常建议您尽可能显式释放内存。 Autorelease 通常用于其他情况,例如当您必须从方法返回值时。

    【讨论】:

    • 那么,我是否必须像这样 [cell.accessoryView release] 在 dealloc 中释放?
    • 没有。释放单元格时它会自行释放。
    【解决方案2】:

    就这个问题而言,他们都做同样的事情。它们之间真的没有区别。

    就内存管理规则而言,调用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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-02
      • 2016-10-20
      • 1970-01-01
      • 1970-01-01
      • 2019-08-20
      • 2012-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多