ios - 使用完 NSString *objects 后是否必须释放它?

标签 ios objective-c

我正在创建一个可用于为 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/

相关文章:

ios - CGImageSource CreateThumbnailAtIndex() 在 iOS 11 和 iOS 12 中给出不同的结果

ios - 在移动 Safari 中自动全屏播放的 YouTube 链接

ios - 我们可以在 iOS 中为一个 App 设置多个 Apple 推送通知设置作为日历 App

ios - 并非所有 NSOperations 返回值

ios - 底角不是圆的

ios - itunes 商店操作失败错误说明不可用

iphone - iOS 7 上的 UITableView 部分索引间距

ios - 为iOS中的特定部分文本设置斜体文本

ios - 从子类 setDelegate 设置父类(super class)委托(delegate)

ios - DJI sdk 获取RTK信息