代码之家  ›  专栏  ›  技术社区  ›  Jean Lebrument

Swift中的CGImageRelease

  •  21
  • Jean Lebrument  · 技术社区  · 11 年前

    在我使用的对象中 CGImageRelease 方法。但在Swift中,这种方法不可用。

    在之后的Apple文档中 Retaining and Releasing Images 有一个 2 Objective-C symbols hidden

    我的问题是,为什么没有更多 CGImage发布 在斯威夫特?我们是否需要调用另一种方法来替换它?

    谢谢

    2 回复  |  直到 7 年前
        1
  •  53
  •   Rob Napier    11 年前

    CGImage 现在由ARC管理。 CGImageRelease() 不再需要。您可以通过查看CGImage.h并注意它包含宏来了解这一点 CF_IMPLICIT_BRIDGING_ENABLED 。这表示Apple已审核此文件,以确保其符合内存管理命名约定,因此ARC可以对从此文件中的函数返回的对象进行内存管理。


    编辑:我读过这篇文章,意识到我在误导人。我不是故意这么说的 CGImageRelease 在ObjC中不需要(这几乎是我在这里暗示的)我只是说,由于审计,Swift能够处理它。在ObjC代码中,您仍然需要释放这些对象。

        2
  •  1
  •   Jirui    7 年前

    Swift中没有更多的CGImageRelease,也没有其他方法来替代它。

    • Swift只使用ARC,因此没有空间调用CFRelease或__bridge_retained。
    • 对于从C函数返回的类型,我们可以调用takeRetainedValue()/takeUnretainedValue)来获取Swift托管值。
    • 有了宏CF_IMPLICIT_BRIDGING_ENABLED,它打开了Clang arc_CF_code_audited,Swift可以处理返回值的内存管理

    详细信息: https://nshipster.com/unmanaged/