在Objc中,我在处理图像后使用CGImageRelease
方法。但是在Swift中,这种方法不可用。
在Retaining and Releasing Images
之后的Apple文档中有一个2 Objective-C symbols hidden
我的问题是,为什么Swift中不再有CGImageRelease
?我们是否要调用另一种方法来替换它?
谢谢!
答案 0 :(得分:45)
CGImage
现在由ARC管理。不再需要CGImageRelease()
。您可以通过查看CGImage.h并注意它包含宏CF_IMPLICIT_BRIDGING_ENABLED
来了解这一点。这表明Apple已审核此文件以确保其符合内存管理命名约定,因此ARC可以内存管理从此文件中的函数返回的对象。
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可以处理返回值的内存管理