我一直在四处寻找,但在使用 ARC (+ iOS6) 时是否需要释放核心图形原语(CGMutablePathRef、CGPath、渐变等),但没有找到明确的答案。
我已经看到了这个(关于释放 CGMutablePathRef 对象的编译器警告静音)和其他一些问题,但它们要么过时,要么不完全清楚(至少对我来说)。
我一直在四处寻找,但在使用 ARC (+ iOS6) 时是否需要释放核心图形原语(CGMutablePathRef、CGPath、渐变等),但没有找到明确的答案。
我已经看到了这个(关于释放 CGMutablePathRef 对象的编译器警告静音)和其他一些问题,但它们要么过时,要么不完全清楚(至少对我来说)。
是的。
粗略地说,只有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 的这篇丰富的帖子。