【问题标题】:How to release an object from an Array?如何从数组中释放对象?
【发布时间】:2011-01-11 15:37:42
【问题描述】:

我目前正在开发一个演示应用程序,所以我有点草率地完成工作,但是我运行“构建和分析”以查看我得到了多少泄漏,......嗯,还有很多。

问题的来源是我有一个 NSMutableArray,我向它添加了一些对象:

NSMutableArray *arr = [[NSMutableArray alloc] init];
[arr addObject:[[MyObject alloc] initWithText:@"Option1"]];
// I have like 100 lines like that and 100 complains

现在,xcode 抱怨潜在的泄漏。

有人可以给我一些建议如何处理吗?

谢谢。

【问题讨论】:

标签: objective-c xcode nsmutablearray


【解决方案1】:

问题是你分配了一个MyObject 的实例,你有责任释放它。当你将它传递给数组时,数组也会保留对象,所以现在你和数组都必须释放它。您可以简单地autorelease 对象,数组将一直保留它,直到您从数组中删除对象或销毁数组本身。

[arr addObject:[[[MyObject alloc] initWithText:@"Option1"]] autorelease];

【讨论】:

    【解决方案2】:

    替换

    [arr addObject:[[MyObject alloc] initWithText:@"Option1"]];
    

    [arr addObject:[[[MyObject alloc] initWithText:@"Option1"] autorelease]];
    

    大多数集合(数组、字典)都拥有添加到其中的对象。而且,由于您已将 +alloc 发送到 MyObject,因此您还拥有刚刚实例化的对象。正如内存管理规则所说,有责任放弃拥有的对象的所有权。向新实例化的对象发送-autorelease 即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-13
      • 1970-01-01
      • 2011-01-26
      • 1970-01-01
      • 2010-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多