开发启用了ARC的iOS应用程序,并且我需要一个dispatch_queue_t实例来执行一些后台任务。
我是否需要为ARC环境中的dispatch_queue_create创建的dispatch_queue_t调用dispatch_release?
谢谢,
总之,不,您在使用ARC时不会呼叫dispatch_release
。
重要
如果您的应用程序是使用macOS 10.8和更高版本或iOS v6.0和更高版本的部署目标构建的,则调度队列通常由ARC管理,因此您无需保留或释放调度队列。
如果您尝试调用dispatch_release
,它将报告错误,这很清楚:
'release'不可用:在自动引用计数模式下不可用
FWIW,虽然现在通常不会这样做,但值得注意的是,可以通过将OS_OBJECT_USE_OBJC
定义为0
来退出GCD对象的ARC管理(例如,将C标志设置为[ C0])。如果您选择退出GCD对象的ARC管理,那么您确实需要-DOS_OBJECT_USE_OBJC=0
(以及所有手动管理GCD对象的随之而来的挑战)。否则,ARC项目将不使用dispatch_release
。
[如果您要处理的是当代项目,这不是实际问题。但是,如果您要处理旧项目或可能包含在旧项目中的源,那么您可能要检查dispatch_release
是否为#if
并据此做出决定。