【问题标题】:Will this create any leak?这会造成任何泄漏吗?
【发布时间】:2013-03-07 03:40:01
【问题描述】:

我在 mutableCopy 中有一个包含 Store 类型对象的数组。我释放数组,释放数组之前是否释放所有对象?

NSMutableArray *stores=[[NSMutableArray alloc]init];
[stores addObject:[store1 mutableCopy]];
[stores addObject:[store2 mutableCopy]];
[stores addObject:[store3 mutableCopy]];
...
[stores release];

【问题讨论】:

  • 按照建议自动释放它们。 addObject 将保留它们,而 removeObject 或 removeAllObjects 将释放它们。如果你不自动释放它们,那么你可以在释放数组存储之前释放数组对象。但是,自动释放更智能、更安全。

标签: objective-c cocoa memory-leaks nsarray


【解决方案1】:

如果您不使用 ARC,那么您需要在某个时候释放您的对象,因为 - mutableCopy 方法会创建一个保留计数为 +1 的新对象。为了避免泄漏,你应该写:

[stores addObject:[[store1 mutableCopy] autorelease];

现在,没有理由不使用 ARC。如果你使用 ARC,你就没事了,你不用打电话给- release

【讨论】:

    【解决方案2】:

    是的。

    你应该使用:

    [stores addObject:[[store1 mutableCopy] autorelease]];
    

    【讨论】:

    • 使用 ARC 会更好。
    猜你喜欢
    • 1970-01-01
    • 2017-07-27
    • 2011-07-14
    • 2019-03-21
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多