0

我一直在四处寻找,但在使用 ARC (+ iOS6) 时是否需要释放核心图形原语(CGMutablePathRef、CGPath、渐变等),但没有找到明确的答案。

我已经看到了这个(关于释放 CGMutablePathRef 对象的编译器警告静音)和其他一些问题,但它们要么过时,要么不完全清楚(至少对我来说)。

4

1 回答 1

3

是的。

粗略地说,只有NSObject实例是通过 ARC 处理的。ARC 是一种编译器机制,可在需要时为您添加release/ retain。因此,它仅适用于您可以在非 ARC 情况下使用release/的情况。retain

这不包括通过 分配的内存malloc,也不包括低级框架(核心图形、核心音频等)。具体来说,通过低级框架分配的对象需要通过特定的方法(例如CGImageRelease,等)释放。

编辑:

Core Foundation 数据类型的一个非常具体的例子是免费桥接类型。在 ARC 之前的世界中,您可以安全地指定一个 CF 数据类型,其中对应的 Objective-C 类是预期的(例如,用 CFString 代替 NSString)。ARC 禁止这样做,因为所有权语义不清楚。因此,可以使用一组 ARC 指令来指定所有权信息(有关更多信息,请参阅内容),但情况并非如此CGPath,它不是免费桥接的(因为CGPath 参考中没有说明)。

顺便说一句,所有 ARC 怀疑的一个很好的资源是Mike Ash 的这篇丰富的帖子

于 2013-03-06T18:08:13.827 回答