在使用完NSString *对象后,是否必须解除分配?

时间:2013-06-30 01:24:18

标签: ios objective-c

我正在创建一个可用于为UITextView设置文本的NSString:

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

我的问题是:循环完成后,我将在内存中有100个对象需要手动解除分配,还是在我们离开循环范围后ObjectiveC会自动清理垃圾?

1 个答案:

答案 0 :(得分:7)

没有

有和没有ARC stringWithFormat:都将返回一个自动释放的对象。

因此,在循环执行后(即自动释放池耗尽时),在循环中创建的所有NSString实例都将被释放。

无论如何,如果你在循环中创建了许多自动释放的对象,你可能希望将循环体包装在@autoreleasepool块内,以便在每次迭代时释放字符串

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

多次迭代的情况下,这可以显着提高循环的性能。