Ios 在';你用完了吗?
我正在创建一个NSString,可用于设置UITextView的文本:Ios 在';你用完了吗?,ios,objective-c,Ios,Objective C,我正在创建一个NSString,可用于设置UITextView的文本: for (int score = 0; score < 100; score++){ NSString *newScore = [NSString stringWithFormat:@"Score: %d", score]; [_scoreText setText:newScore]; } for(整数分数=0;分数
for (int score = 0; score < 100; score++){
NSString *newScore = [NSString stringWithFormat:@"Score: %d", score];
[_scoreText setText:newScore];
}
for(整数分数=0;分数<100;分数++){
NSString*新闻核心=[NSString stringWithFormat:@“分数:%d”,分数];
[[u scoreText setText:newScore];
}
我的问题是:循环完成后,我的内存中会有100个对象需要手动释放,还是Objective会在我们离开循环范围后自动清理垃圾?否
带和不带ARC的stringWithFormat:
都将返回自动删除的对象
因此,使用循环创建的所有NSString
实例将在循环执行后的某个时间点(即自动释放池耗尽时)被释放
无论如何,如果要在循环中创建许多自动释放对象,可能需要将循环体包装在@autoreleasepool
块中,以便在每次迭代时释放字符串
for (int score = 0; score < 100; score++){
@autoreleasepool {
NSString *newScore = [NSString stringWithFormat:@"Score: %d", score];
[_scoreText setText:newScore];
}
}
for(整数分数=0;分数<100;分数++){
@自动释放池{
NSString*新闻核心=[NSString stringWithFormat:@“分数:%d”,分数];
[[u scoreText setText:newScore];
}
}
这可以显著提高循环的性能,以防多次迭代。如何检查?我使用的是Xcode 4.3.6,并为iOS 5+开发。在特定情况下,这并不重要。下面是我的答案,这里有一个简单的方法可以知道您的项目是否使用ARC-尝试在某个对象上添加对
release
的调用。如果您发现ARC下不支持它的错误,则您正在使用ARC。如果没有错误,那么您使用的是MRC.Gabriele,ARC是否允许@autoreleasepool?@zaitsman。是的,@autoreleasepool
块受ARC和MRC环境的支持。而且,即使在MRC中,它们也应该比以前的NSAutoreleasePool
方法快得多。我认为@autoreleasepool应该在for循环之外不应该。这将破坏拥有它的全部意义。