Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在';你用完了吗?_Ios_Objective C - Fatal编程技术网

Ios 在';你用完了吗?

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;分数

我正在创建一个NSString,可用于设置UITextView的文本:

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循环之外不应该。这将破坏拥有它的全部意义。