0

虽然使用 GCD 为后台线程创建的普通队列需要 dispatch_release 来释放对象的内存,但获取全局队列也需要这样做,因为取消分配全局队列可能会导致操作系统出现问题我问:是持有对由 dispatch_get_global_queue 获得的队列的引用的对象所需的 dispatch_release 或者 dispatch_source_cancel 是否足够?

为了更深入地解决这个问题,我使用全局队列来设置计时器并让它们运行并触发一个事件,这个项目是非 ARC 的。

4

2 回答 2

7

您没有创建对象,因此您不拥有它。因此,您不能释放它。

如果您将它传递给将保留对它的引用的对象,则该对象应dispatch_retain在获取时排队,并dispatch_release在完成时排队。

于 2013-09-05T01:25:21.343 回答
0

GCD API 的命名约定源自 CoreFoundation 的命名约定:

Core Foundation 的内存管理编程指南

特别是其中的“获取规则”回答了您的问题,API 被命名为 dispatch_get _global_queue不是 dispatch_create _global_queue,因此它不授予对返回对象的引用。

于 2013-09-05T21:54:29.067 回答