互联网上的很多帖子都说我可以使用以下代码返回未保留的图像源:
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'
我做错了吗?或者是否已将此方法删除以支持其他内容?
答案 0 :(得分:1)
在处理非托管对象时(例如某些返回takeUnretainedValue
或类似功能的函数),您只能使用takeRetainedValue
或Unmanaged<AnyObject>!
。在这种情况下,这不是一个非托管对象,因此不需要这样做。
顺便说一下,当从名称中带有Create
或Copy
的Core Foundation函数返回一个对象时,此对象的所有权已转移给您,您有责任将其释放(见Create Rule)。在这些情况下,您几乎总是希望使用takeRetainedValue
,以便Swift的ARC实现自动管理此对象的内存管理。如果使用takeUnretainedValue
,除非手动释放通过符合Create Rule的方法获得的与此对象关联的内存,否则将泄漏内存。