您是否需要在iOS 6.0中释放ARC下的GCD队列?
在Paul Hegarty课程的iOS 5教程之后,我们在演示GCD使用的应用程序中看到了这段代码。显然,GCD需要发布,因为在仍然需要哪些对象的情况下,多线程的问题有些不可预测您是否需要在iOS 6.0中释放ARC下的GCD队列?,ios,xcode,automatic-ref-counting,grand-central-dispatch,Ios,Xcode,Automatic Ref Counting,Grand Central Dispatch,在Paul Hegarty课程的iOS 5教程之后,我们在演示GCD使用的应用程序中看到了这段代码。显然,GCD需要发布,因为在仍然需要哪些对象的情况下,多线程的问题有些不可预测 dispatch_async(dowloadQueue, ^{ .... // do some stuff .... }); dispatch_release(dowloadQueue); 我已经升级到iOS 6和XCode 4.5,我得到了一个 “ARC禁止显式释放…”消息 我
dispatch_async(dowloadQueue, ^{
....
// do some stuff
....
});
dispatch_release(dowloadQueue);
我已经升级到iOS 6和XCode 4.5,我得到了一个
“ARC禁止显式释放…”消息
我没有在iOS5/XCode 4.2下尝试这段代码
这仅仅是因为ARC变得更聪明,我不再需要在GCD中发布吗?
或者我只是误解了吗?当您以Mountain Lion和iOS 6.0为目标时,ARC现在将为您管理调度队列和其他GCD类型。如果您以较早版本的OS X或iOS为目标,则仍然需要显式保留和释放GCD类型(不仅仅是出于线程安全原因,否则会导致内存泄漏),但这在仅以较新版本为目标时会为您处理
这就是为什么在针对iOS 6.0时,您会在ARC下看到这样一个编译器错误。您是否需要在创建队列时将其传输到Objective-C?@openfrog-否,如果它被视为Objective-C对象,它已经由ARC处理,因此无需传输。@BradLarson有办法关闭它吗?或者,我如何编写它,使其在iOS 5和iOS 6下都能编译?@fishinear if(floor(NSFoundationVersionNumber)@MurraySagal这是一条编译器错误消息,而不是运行时错误,因此无法工作。