开发一个启用了ARC的iOS应用程序,并且我需要一个dispatch_queue_t实例来执行一些后台任务。
我是否需要为ARC环境中的dispatch_queue_create创建的dispatch_queue_t调用dispatch_release?
谢谢
答案 0 :(得分:0)
简而言之,不,您在使用ARC时不会打dispatch_release
。
重要
如果您的应用程序的构建目标是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
)并据此做出决定。