2013-06-30 55 views
2

我創建可用於設置文本的UITextView一個的NSString:完成使用後,您是否必須解除分配NSString *對象?

for (int score = 0; score < 100; score++){ 
    NSString *newScore = [NSString stringWithFormat:@"Score: %d", score]; 
    [_scoreText setText:newScore]; 
} 

我的問題是:循環完成後,我會在內存中有100個對象,我必須手動解除分配,或者將ObjectiveC在我們離開循環範圍後自動清理垃圾?

+0

您是否在使用ARC? – yeesterbunny

+0

如何檢查?我正在使用Xcode 4.3.6併爲iOS 5+開發 –

+0

http://stackoverflow.com/questions/11380533/how-do-i-know-if-my-program-has-arc-enabled-or-not – yeesterbunny

回答

7

具有和不具有ARC stringWithFormat:將返回一個自動釋放物體。

因此,所有使用循環創建的NSString實例將在循環執行後的某個點(即自動釋放池被耗盡時)解除分配。

無論如何,如果你正在創建的循環內許多自動釋放的對象,你可能想換一個@autoreleasepool塊內的循環體,使字符串在每次迭代

for (int score = 0; score < 100; score++){ 
    @autoreleasepool { 
     NSString *newScore = [NSString stringWithFormat:@"Score: %d", score]; 
     [_scoreText setText:newScore]; 
    } 
} 

發佈這可以顯著增加你的循環的性能,在很多迭代的情況下。

+0

Gabriele,在ARC下允許@autoreleasepool嗎? – zaitsman

+0

@zaitsman。是的,ARC和MRC環境都支持'@ autoreleasepool'塊。 –

+0

@autorelease點大增! – uchuugaka

相關問題