2011-08-03 18 views
0

NSNumber在for循环中泄漏内存 - 在Xcode仪器版本4.1上在OSX Lion上启动 - 当在带有仪器的设备配置文件上执行时,泄漏内存。任何想法赞赏。NSNumber在For循环中泄漏内存numberWithInt

 int currentActivityScore = [self.activityScore intValue]; 
     int deltaCriteriaScore = [[segmentItemArray objectAtIndex:3] intValue]; 
     int newActivityScore = currentActivityScore + deltaCriteriaScore; 
     self.activityScore = [NSNumber numberWithInt:newActivityScore]; 

我也试过这个代码,仍然泄漏!!!

 int currentActivityScore = [self.activityScore intValue]; 
     int deltaCriteriaScore = [[segmentItemArray objectAtIndex:3] intValue]; 
     int newActivityScore = currentActivityScore + deltaCriteriaScore; 
     NSNumber *newActivityScoreNumber = [[NSNumber alloc] initWithInt:newActivityScore]; 
     self.activityScore = newActivityScoreNumber; 
     [newActivityScoreNumber release]; 
+0

你声明'activityScore'是'retain'还是'copy'? – tia

+0

你在'-dealloc'中放弃了'activityScore'的所有权吗? –

+0

当你指向它时,这不是泄漏。仪器将指向它被创建的位置,以确定泄漏的“原因”,但真正的原因*是您没有干净地清除它。你如何处置这个伊娃? – bshirley

回答

0

假设activityScore要么保留或复制它的值,那么我认为你的代码没问题。

仪器给予误报(或错过真正的泄漏)并不是闻所未闻。考虑它是一个指向代码来检查而不是保证泄漏的指针。

+0

好吧,它提供了一个泄漏,我发现这个泄漏只是当我把这个内部For循环 –

+0

你已经显示我们的代码没有泄漏。无论您需要向我们展示更多代码,还是您需要接受这是来自仪器的误报。 –

+0

这是对我有用的东西:我只是没有做循环内部的计算,我创建了局部变量,并且只有在For循环之后,我才将它们分配到类属性中 - 这就摆脱了问题 –

0
NSNumber *newActivityScoreNumber = [NSNumber numberWithInt:newActivityScore]; 
self.activityScore = newActivityScoreNumber; 

所以这里的NSNumber会被自动释放。你不需要为此烦恼。

+0

与OPs代码的区别是...? –

+0

当我把它放在一个循环内时,它们都会泄漏我的记忆。 –