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



我正在创建一个NSString,该字符串可用于设置UITextView:的文本

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

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

否。

无论是否使用ARC stringWithFormat:,都将返回一个自动释放的对象。

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

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

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

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

最新更新