【问题标题】:With ARC, do CGMutablePathRefs need to be released? [duplicate]使用 ARC,是否需要释放 CGMutablePathRefs? [复制]
【发布时间】:2013-03-06 18:05:21
【问题描述】:

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

我已经看到了这个 (silence a compiler warning about releasing a CGMutablePathRef object) 和其他一些问题,但它们要么已经过时,要么并不完全清楚(至少对我而言)。

【问题讨论】:

    标签: ios core-graphics automatic-ref-counting


    【解决方案1】:

    是的。

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

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

    编辑:

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

    顺便说一句,对于所有 ARC 疑问,一个很好的资源是 this rich post of Mike Ash's

    【讨论】:

    • +1 请注意,免费的桥接 CF 类可以使用桥接转换置于 ARC 的控制之下。
    • @Andrew Madsen:谢谢。为了完整起见,我将相关信息添加到我的答案中,尽管它不适用于 OP 的案例。
    猜你喜欢
    • 2012-04-17
    • 2012-10-10
    • 2013-03-17
    • 2012-09-17
    • 2013-05-12
    • 2012-03-09
    • 2020-06-01
    • 2018-08-07
    • 1970-01-01
    相关资源
    最近更新 更多