可能重复:
ARC 内存泄漏
我们可以在启用 ARC 的项目中使用 @autorelease 池吗?如果是这样,使用@autorelease 池有什么用。我在 google 中发现,即使项目启用了 ARC,它也只会处理主线程。如果我们创建其他线程,那么我们必须注意释放对象。谁能解释
可能重复:
ARC 内存泄漏
我们可以在启用 ARC 的项目中使用 @autorelease 池吗?如果是这样,使用@autorelease 池有什么用。我在 google 中发现,即使项目启用了 ARC,它也只会处理主线程。如果我们创建其他线程,那么我们必须注意释放对象。谁能解释
是的,ARC 默认只设置在主线程上。但是,您也可以在后台线程中利用它。解决方案很简单:ARC 的语义@autoreleasepool { }
不同;它实际上并没有以经典的 MRC 方式分配和释放 NSAutoreleasePool 对象,它只是告诉 ARC 也处理调用它的线程中的对象,从而实现自动释放池样式的效果。
当您从手动内存管理迁移到 ARC 时,您将替换:
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[pool release];
和
@autoreleasepool {
}
阅读NSAutoreleasePool文档和Advanced Memory Management Programming Guide以获得更好的理解。