我是否需要释放由 dispatch_queue_create 创建的 dispatch_queue_t
Do I need to release the dispatch_queue_t created by dispatch_queue_create
开发一个启用了 ARC 的 iOS 应用程序,我需要一个 dispatch_queue_t 的实例来执行一些后台任务。
想知道我是否需要为 dispatch_queue_create 在 ARC 环境中创建的 dispatch_queue_t 调用 dispatch_release?
谢谢,
简而言之,不,你在使用ARC时不调用dispatch_release
。
Important
If your app is built with a deployment target of macOS 10.8 and later or iOS v6.0 and later, dispatch queues are typically managed by ARC, so you do not need to retain or release the dispatch queues.
如果您尝试调用 dispatch_release
,它会报告一个非常清楚的错误:
'release' is unavailable: not available in automatic reference counting mode
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
并据此做出决定。
开发一个启用了 ARC 的 iOS 应用程序,我需要一个 dispatch_queue_t 的实例来执行一些后台任务。
想知道我是否需要为 dispatch_queue_create 在 ARC 环境中创建的 dispatch_queue_t 调用 dispatch_release?
谢谢,
简而言之,不,你在使用ARC时不调用dispatch_release
。
Important
If your app is built with a deployment target of macOS 10.8 and later or iOS v6.0 and later, dispatch queues are typically managed by ARC, so you do not need to retain or release the dispatch queues.
如果您尝试调用 dispatch_release
,它会报告一个非常清楚的错误:
'release' is unavailable: not available in automatic reference counting mode
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
并据此做出决定。