20

在 Paul Hegarty 课程上的 iOS 5 教程之后,我们在一个演示 GCD 使用的应用程序中看到了这段代码。显然 GCD 需要发布,因为与多线程有关的问题在仍然需要哪些对象方面有些不可预测。

  dispatch_async(dowloadQueue, ^{
    ....
    // do some stuff
   ....
    });
  dispatch_release(dowloadQueue);

我已升级到 iOS 6 和 XCode 4.5,并且收到“ARC 禁止显式发布...”消息

我没有在 iOS5 / XCode 4.2 下尝试过这段代码

这仅仅是因为 ARC 变得更聪明了,我不再需要在 GCD 中发布了吗?还是我刚才误会了?

4

1 回答 1

29

当您以 Mountain Lion 和 iOS 6.0 为目标时,ARC 现在将为您管理调度队列和其他 GCD 类型。如果您针对 OS X 或 iOS 的早期版本,您仍然需要显式保留和释放 GCD 类型(不仅仅是出于线程安全的原因,否则您会泄漏内存),但是仅针对较新的操作系统时会为您处理版本。

这就是为什么您在面向 iOS 6.0 时会在 ARC 下看到这样的编译器错误。

于 2012-10-04T17:42:58.657 回答