自动释放的 NSArray 会导致内存泄漏吗?

Posted

技术标签:

【中文标题】自动释放的 NSArray 会导致内存泄漏吗?【英文标题】:Can an autoreleased NSArray cause a memory leak? 【发布时间】:2011-10-15 00:35:01 【问题描述】:

我正在尝试使用 arrayWithArray 创建一个 NSMutableArray,添加两个对象,排序,并将其作为 NSArray 存储到 ivar。我的代码如下所示:

NSMutableArray *_mutableItems = [NSMutableArray arrayWithArray:[self.mainViewController.someDictionary allKeys]];

[_mutableItems addObject:@"Buildings"];
[_mutableItems addObject:@"Parking"];

self.curItems = [_mutableItems sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];

当我分析应用程序时,我在弹出视图后发现 NSArray 的内存泄漏。但我不明白的是:不是所有这些对象都是自动释放的吗?将保留计数分配给实例属性时是否会增加保留计数?

【问题讨论】:

可能重复:***.com/questions/6829741/… 【参考方案1】:

是的,设置属性可能会增加保留计数。具体来说,_mutableItems 将被自动释放,但您使用 sortedArrayUsingSelector 创建的数组由属性保留。

您的财产声明是否包括retaincopy

@property (retain) NSArray *curItems;

如果是这样,在你的类 dealloc 方法中,确保你在数组上调用 release

- (void)dealloc 
    [curItems release];
    [super dealloc];

【讨论】:

以上是关于自动释放的 NSArray 会导致内存泄漏吗?的主要内容,如果未能解决你的问题,请参考以下文章

Objective-C:内存泄漏与自动释放的多重分配?

QByteArray导致的内存泄漏问题

闭包会造成内存泄漏吗

此 CAAnimation 会导致泄漏或保留周期吗?

内存溢出和内存泄漏

闭包会造成内存泄漏吗?