互联网上的很多帖子都说我可以使用以下代码返回未保留的图像源:
let imageData1 = image.TIFFRepresentation
let source1 = CGImageSourceCreateWithData(imageData1 as CFDataRef, nil).takeUnretainedValue()
let maskRef1 = CGImageSourceCreateImageAtIndex(source1, UInt(0), nil)
但是,我收到以下编译时错误:
'CGImageSource' does not have a member named 'takeUnretainedValue'
我做错了什么吗?或者是否已删除此方法以支持其他方法?
最佳答案
您只使用takeUnretainedValue
或takeRetainedValue
处理非托管对象时(例如,某些返回 Unmanaged<AnyObject>!
或类似内容的函数)。在本例中,这不是非托管对象,因此不需要它。
顺便说一句,当从 Core Foundation 函数返回 Create
的对象时或Copy
从名字上看,这个对象的所有权已经转移给你了,你有责任释放它(参见 Create Rule )。在这些情况下,您几乎总是想使用 takeRetainedValue
,以便该对象的内存管理由 Swift 的 ARC 实现自动管理。如果您使用takeUnretainedValue
,除非您手动释放通过符合 Create Rule 的方法获得的与此对象关联的内存,否则您将泄漏内存。 .
关于swift - “CGImageSource”没有名为 'takeUnretainedValue' 的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27798710/