我是否需要释放由dispatch_queue_create创建的dispatch_queue_t

问题描述 投票:0回答:1

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

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

谢谢,

ios grand-central-dispatch dispatch-async
1个回答
0
投票

总之,不,您在使用ARC时不会呼叫dispatch_release

The documentation说:

重要

如果您的应用程序是使用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并据此做出决定。

© www.soinside.com 2019 - 2024. All rights reserved.