我正在创建一个可用于为UITextView设置文本的NSString:
for (int score = 0; score < 100; score++){
NSString *newScore = [NSString stringWithFormat:@"Score: %d", score];
[_scoreText setText:newScore];
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:循环完成后,我将在内存中有100个对象,我必须手动释放,或者在我们离开循环范围后ObjectiveC会自动清理垃圾吗?
没有.
有和没有ARC stringWithFormat:都会返回一个自动释放的对象.
因此NSString,在循环执行后的某个时刻(即自动释放池被耗尽时),将使用循环创建的所有实例都被释放.
无论如何,如果你在循环中创建了许多自动释放的对象,你可能想要将循环体包装在一个@autoreleasepool块中,以便在每次迭代时释放字符串
for (int score = 0; score < 100; score++){
@autoreleasepool {
NSString *newScore = [NSString stringWithFormat:@"Score: %d", score];
[_scoreText setText:newScore];
}
}
Run Code Online (Sandbox Code Playgroud)
在多次迭代的情况下,这可以显着提高循环的性能.
| 归档时间: |
|
| 查看次数: |
590 次 |
| 最近记录: |