2012-04-09 91 views
1

我想格式化一個數組數組以顯示在循環中的CCLabelTTF數組。 NSNumberFormatter返回一個autorelease對象。我不太清楚我應該如何處理這裏的內存管理。任何建議將不勝感激。Objective C自動釋放與NSNumberFormatter循環

這裏是我試圖找出問題:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
NSString *tempString; 

for(int i = 0; i<10; i++){ 
    tempString = [formatter stringFromNumber:[NSNumber numberWithInteger:NumberArray[i]]]; 
    CCLabelTTFArray[i] = [[CCLabelTTF alloc] initWithString: tempString fontName:@"Arial" fontSize:10.0f]; 
    [tempString release]; 
} 

[formatter release]; 
+2

你不需要調用'[tempString release];',就是這樣。在您的方法完成後,運行循環會在一段時間內爲您「自動釋放」對象。 – dasblinkenlight 2012-04-09 16:39:15

+0

我認爲可能有問題,因爲我改變tempString指針,所以我失去了指向該對象的指針。我認爲這可能會導致內存泄漏,因爲函數的結尾會自動釋放tempString,但不是所有以前的tempString分配。我不是故意把[tempString發佈]放進去,我的錯誤。 – Ganamede 2012-04-09 16:48:08

+0

我編輯了我的答案以迴應您的上次評論。 – dasblinkenlight 2012-04-09 16:51:53

回答

1

你並不需要調用[tempString release];:運行循環將「自動釋放」了你的對象一段時間後,你的方法完成。有了短跑循環(比如你的,只有10次迭代),沒有什麼可擔心的。對於數千次迭代的循環,您可以考慮添加一個Autorelease Pool

我想這可能會導致內存泄漏,因爲函數的最終它會自動釋放tempString但不是所有tempString

以前分配的stringFromNumber:方法的每次調用增加了它的迴歸值自動釋放池,所以無論循環執行多少次,所有返回的字符串都將被自動釋放。

+0

謝謝,我欣賞直截了當的迴應。我已經讀過的所有內容都沒有清楚說明如何跟蹤autorelease對象。 – Ganamede 2012-04-09 17:17:49