2011-08-03 17 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

當我把它放在一個循環內時,它們都會泄漏我的記憶。 –