NSMutableArray 和属性泄漏内存

Posted

技术标签:

【中文标题】NSMutableArray 和属性泄漏内存【英文标题】:NSMutableArray and property leaking memory 【发布时间】:2009-12-27 04:45:38 【问题描述】:

我的最新应用程序处于内存泄漏清理模式,并且遇到了一些我无法解决的问题。

除 1 个烦人的问题外,已清理以下方法。 Instruments 告诉我,我的名为 itemsToKeep 的 NSMutableArray 正在泄漏内存,此时我正在创建对象。任何关于我为什么泄漏内存的想法都将不胜感激。

以下是关于 retainCounts 的一些说明: 进入方法:self.myList有retainCount = 1 退出该方法:self.myList 有 retainCount = 2 并且 itemsToKeep 有 retainCount = 2。 我可以在最后轻松地执行 [itemsToKeep 发布],这会将两个计数都减至 1,但应用程序会在一段时间后崩溃(我想我知道为什么)。

有谁知道如何消除 itemsToKeep 的内存泄漏?

谢谢。

-(void)parsedScores:(BOOL)shouldAdd 

//trim space, tab, newline from both ends
NSString *tmp = self.lblCurrentName.text;
NSString *list = [self trimString:tmp];

NSString *separators = @",";

[self.myList removeAllObjects]; // doesn't impact retain counts

self.myList = (NSMutableArray *)[list componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:separators]]; //this bumps up the self.myList retain count to 2

NSMutableArray *itemsToKeep = [NSMutableArray arrayWithCapacity:30];    

for (NSString *item in self.myList)  
    NSString *tmpItem = [self trimString:item];
    if (! [self shouldRemoveItem:tmpItem]) 
        [itemsToKeep addObject:tmpItem];
       


self.myList = itemsToKeep; //makes both variables' retain counts = 2

【问题讨论】:

【参考方案1】:

我看不到您提供的方法有泄漏,所以我认为它发生在其他地方。您应该检查self.myList 是否保留在其他地方而没有被释放。

此外,您可能不应该出于调试目的查看保留计数。保留计数可能会产生误导,因为一个对象被保留多少次并不重要,只要它被释放的次数相等。

【讨论】:

谢谢...我会检查 self.myList - 没想到。它通常作为属性添加并在 dealloc 中删除。但可能还有其他地方保留它。另外,感谢回复:您对保留计数的观点。

以上是关于NSMutableArray 和属性泄漏内存的主要内容,如果未能解决你的问题,请参考以下文章

使用 NSMutableArray 时内存泄漏

iPhone SDK 中的 NSMutableArray、NSArray、NSString 内存泄漏

NSMutableArray 内存泄漏问题

iPhone 应用程序内存泄漏与 NSMutableArray 中的 UIImages

如何在不造成内存泄漏的情况下清除自定义对象的 NSMutableArray?

使用 NSPredicates 过滤 NSMutableArray