我是否需要释放由dispatch_queue_create

时间:2020-05-31 14:26:26

标签: ios grand-central-dispatch dispatch-async

开发一个启用了ARC的iOS应用程序,并且我需要一个dispatch_queue_t实例来执行一些后台任务。

我是否需要为ARC环境中的dispatch_queue_create创建的dispatch_queue_t调用dispatch_release?

谢谢

1 个答案:

答案 0 :(得分:0)

简而言之,不,您在使用ARC时不会打dispatch_release

The documentation说:

重要

如果您的应用程序的构建目标是macOS 10.8和更高版本或iOS v6.0和更高版本,则调度队列通常由ARC管理,因此您无需保留或释放调度队列。

如果您尝试致电dispatch_release,它将报告一个错误,这很清楚:

“发布”不可用:在自动参考计数模式下不可用


FWIW,尽管如今人们通常不会这样做,但值得注意的是,可以通过将OS_OBJECT_USE_OBJC定义为0来退出GCD对象的ARC管理(例如,将带有-DOS_OBJECT_USE_OBJC=0的C标志)。如果您选择退出GCD对象的ARC管理,那么您将需要dispatch_release(以及所有手动管理GCD对象的随之而来的挑战)。否则,ARC项目将不会使用dispatch_release

如果您要处理的是当代项目,这不是实际问题。但是,如果您要处理的是旧项目中可能包含的旧项目或源,那么您可能要检查#if(用OS_OBJECT_USE_OBJC)并据此做出决定。

相关问题