2

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

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

我的问题是:循环完成后,内存中是否有 100 个必须手动释放的对象,或者在我们离开循环范围后,ObjectiveC 会自动清理垃圾?

4

1 回答 1

8

不。

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

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

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

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

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

于 2013-06-30T01:29:17.737 回答