ios - ARC 如何在循环中工作?

标签 ios objective-c memory-management automatic-ref-counting

我查了很多资料,但没有找到任何东西。也许我不能很好地搜索)据我所知,ARC就像编译工具一样工作。该工具实际上代替开发人员在汇编代码中设置释放和保留。但我的问题是,例如,如果我们在随机值循环中创建对象,它将如何工作?

int value = arc4random_uniform(74);
for(int i=0; i<value; ++i) {
   MyObject* my = [MyObject new];
}

那么它将如何解决,因为在编译时我们不知道对象的数量。如果它像MyObject* my = [MyObject new];之后一样工作arc只需添加[my release];如果现在要释放的话为什么我们应该使用autoreleasepool???

最佳答案

这取决于编译器的突发奇想,并且可能会根据目标架构、操作系统版本和/或编译器优化设置而变化。

循环的次数并不重要。

实际上,这是:

for(int i=0; i<value; ++i) {
   MyObject* my = [MyObject new];
}

可能编译为:

for(int i=0; i<value; ++i) {
   MyObject* my = [[MyObject new] autorelease];
}

或者这个:

for(int i=0; i<value; ++i) {
   MyObject* my = [MyObject new];
   [my release];
}

两者都完全有效。

通过分析,您可能会发现,如果 for() 循环体产生大量自动释放噪音,则需要使用 @autoreleasepool {} 包围该循环体。环形。或许。不过,通常来说,大量的自动释放池流量表明存在算法问题。优化内存抖动对于性能通常至关重要。

关于ios - ARC 如何在循环中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51844132/

相关文章:

iphone - 导航栏图片隐藏自定义导航栏按钮

ios - UITableView contentInset : when scrolling the table to the top, 行在第一个标题上方仍然可见

objective-c - Cocoa 中的本地对象作用域和内存管理

c++ - 跨进程内存管理

ios - 未使用的 xib 出现在应用程序中

c++ - ios opencv 的回调 "processImage"分辨率与 ImageView 不匹配

ios - 方法 didSelectAnnotation 不起作用(Skobbler iOS)

iphone - NSString 中的方法

ios - 单击 UITableview 行后 UIActivityIndi​​catorView 不显示?

iphone - 如何使用iPhone SDK下载大文件并避免内存使用问题?