可能是重复内容:
ARC 内存泄漏
在启用 ARC 的项目中,我们可以使用 @autoreleasepool 吗?如果可以,那么使用 @autoreleasepool 有什么用途呢?在谷歌上我发现,即使项目启用了 ARC,它也只会处理主线程。如果我们创建其他线程,则必须注意释放对象。
有人能解释一下吗?
可能是重复内容:
ARC 内存泄漏
在启用 ARC 的项目中,我们可以使用 @autoreleasepool 吗?如果可以,那么使用 @autoreleasepool 有什么用途呢?在谷歌上我发现,即使项目启用了 ARC,它也只会处理主线程。如果我们创建其他线程,则必须注意释放对象。
有人能解释一下吗?
是的,ARC默认只在主线程上设置。然而,您也可以在后台线程中利用它。解决方案很简单:对于ARC,@autoreleasepool { }
的语义与经典的MRC方式不同;它实际上并不分配和释放NSAutoreleasePool对象,而是告诉ARC同样负责调用它的线程中的对象,从而实现autorelease池样式的效果。
main()
和其祖先执行的代码,而不创建新线程的代码 - 即所有 UI 代码。更准确地说,所有未使用 pthread_create()
、NSThread
和带有除主队列以外的队列的 dispatch_async()
调用的代码。 - user529758当你从手动内存管理迁移到ARC时,你将替换以下内容:
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[pool release];
使用
@autoreleasepool {
}