Swift中的CGImageRelease

时间:2014-09-11 14:29:02

标签: ios swift cgimage

在Objc中,我在处理图像后使用CGImageRelease方法。但是在Swift中,这种方法不可用。

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

我的问题是,为什么Swift中不再有CGImageRelease?我们是否要调用另一种方法来替换它?

谢谢!

2 个答案:

答案 0 :(得分:45)

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


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

答案 1 :(得分:1)

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/