我正在创建一个可用于为UITextView设置文本的NSString:
for (int score = 0; score < 100; score++){
NSString *newScore = [NSString stringWithFormat:@"Score: %d", score];
[_scoreText setText:newScore];
}
我的问题是:循环完成后,我将在内存中有100个对象需要手动解除分配,还是在我们离开循环范围后ObjectiveC会自动清理垃圾?
答案 0 :(得分:7)
没有
有和没有ARC stringWithFormat:
都将返回一个自动释放的对象。
因此,在循环执行后(即自动释放池耗尽时),在循环中创建的所有NSString
实例都将被释放。
无论如何,如果你在循环中创建了许多自动释放的对象,你可能希望将循环体包装在@autoreleasepool
块内,以便在每次迭代时释放字符串
for (int score = 0; score < 100; score++){
@autoreleasepool {
NSString *newScore = [NSString stringWithFormat:@"Score: %d", score];
[_scoreText setText:newScore];
}
}
在多次迭代的情况下,这可以显着提高循环的性能。