我在我的最新应用程序中处于内存泄漏清理模式,并且遇到了一些我无法解决的问题。
除了1个唠叨问题外,还清除了以下方法。 Instruments告诉我,我的NSMutableArray调用itemsToKeep是在创建对象时泄漏内存。关于我为什么泄漏记忆的任何想法都会受到最高的赞赏。
以下是关于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
}
答案 0 :(得分:0)
我看不到你提供的方法有泄漏,所以我认为它正在其他地方发生。您应该检查self.myList
是否在未被释放的情况下保留在其他地方。
此外,您可能不应该查看保留计数以进行调试。保留计数可能会产生误导,因为只要对象被释放了相同的次数,对象保留的次数无关紧要。