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