使用dispatch_get_global_queue时,非ARC'd项目需要dispatch_release

时间:2013-09-05 01:20:43

标签: ios objective-c multithreading grand-central-dispatch

虽然使用GCD为后台线程创建的普通队列需要dispatch_release释放对象的内存,但是由于取消分配全局队列可能会导致操作系统出现问题,因此需要完成获取全局队列的相同操作。 ask:对于持有dispatch_get_global_queue获取的队列的引用的对象是一个dispatch_release,还是dispatch_source_cancel足够了?

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

2 个答案:

答案 0 :(得分:7)

您没有创建对象,因此您不拥有它。因此,您不得发布它。

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

答案 1 :(得分:0)

GCD API的命名约定来自CoreFoundation:

Memory Management Programming Guide for Core Foundation

特别是其中的“获取规则”会回答您的问题,API名为dispatch_ get _global_queue而不是dispatch_ 创建 _global_queue,因此它不会提供对返回的对象。