我正在创建一个可用于为 UITextView 设置文本的 NSString:
for (int score = 0; score < 100; score++){
NSString *newScore = [NSString stringWithFormat:@"Score: %d", score];
[_scoreText setText:newScore];
}
我的问题是:循环完成后,内存中是否会有 100 个对象必须手动释放,或者 ObjectiveC 会在我们离开循环范围后自动清理垃圾?
最佳答案
没有。
使用和不使用 ARC stringWithFormat:
都会返回一个自动释放的对象。
因此所有使用循环创建的 NSString
实例将在循环执行后的某个时间点被释放(即当自动释放池被耗尽时)。
无论如何,如果您在循环内创建许多自动释放对象,您可能希望将循环体包裹在一个@autoreleasepool
block 中,以便在每次迭代时释放字符串
for (int score = 0; score < 100; score++){
@autoreleasepool {
NSString *newScore = [NSString stringWithFormat:@"Score: %d", score];
[_scoreText setText:newScore];
}
}
在许多 迭代的情况下,这可以显着提高循环的性能。
关于ios - 使用完 NSString *objects 后是否必须释放它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17386223/