【问题标题】:iOS 5+ and dispatch_releaseiOS 5+ 和 dispatch_release
【发布时间】:2013-11-15 00:27:11
【问题描述】:
我正在开发一个将其部署目标设置为 iOS 5.0 的应用。我已经阅读了几篇关于编译器抱怨在部署目标设置为 iOS 6 或更高版本时使用 dispatch_release 的帖子,所以它并没有抱怨我,但我不确定我是否需要处理这个问题。我一直在 iOS 6 和 7 设备上进行测试,但没有看到任何奇怪的东西......这可能是个问题,不使用 dispatch_release 或不取决于运行应用程序的系统版本吗?将应用提交到商店时甚至会成为拒绝的理由吗?
谢谢!
【问题讨论】:
标签:
ios5
ios6
ios7
release
grand-central-dispatch
【解决方案1】:
dispatch_retain 和 dispatch_release 的可用性取决于您是否使用 ARC 构建以及使用的部署目标,而不取决于运行代码的操作系统版本(除了需要大于或等于部署目标明显):
如果使用 ARC 和 iOS 6 或更高版本的部署目标构建 Objective-C 代码,dispatch_retain 和 dispatch_release 等效于 -[retain] 和 -[release] 方法,因此不可用这些方法不可用,并导致 ARC 下的编译器错误。
如果不满足这些条件(例如,您正在构建纯 C 代码,而不是使用 ARC 构建或使用 iOS 5 部署目标),dispatch_retain 和 dispatch_release 可用并且可以不加改变地使用(确实必须用于避免泄漏)并且生成的代码将在 iOS 6 或更高版本上运行良好。
有关更多详细信息,请参阅 <os/object.h> 中的 headerdoc,或观看有关 具有块、GCD 和 XPC 的异步设计模式的 WWDC2012 会话。