在启用ARC的项目中使用自动释放

时间:2012-10-30 06:29:22

标签: iphone ios memory-management nsautoreleasepool

  

可能重复:
  ARC memory leaks

我们可以在启用ARC的项目中使用@autorelease池吗?如果是这样,使用@autorelease池的用途是什么。我在google中发现,即使项目启用了ARC,它也只会处理主线程。如果我们创建其他线程,那么我们必须处理释放对象。 任何人都可以解释

2 个答案:

答案 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以便更好地理解。