'CGImageSource'没有名为'takeUnretainedValue'的成员

时间:2015-01-06 12:28:44

标签: swift

互联网上的很多帖子都说我可以使用以下代码返回未保留的图像源:

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'

我做错了吗?或者是否已将此方法删除以支持其他内容?

1 个答案:

答案 0 :(得分:1)

在处理非托管对象时(例如某些返回takeUnretainedValue或类似功能的函数),您只能使用takeRetainedValueUnmanaged<AnyObject>!。在这种情况下,这不是一个非托管对象,因此不需要这样做。

顺便说一下,当从名称中带有CreateCopy的Core Foundation函数返回一个对象时,此对象的所有权已转移给您,您有责任将其释放(见Create Rule)。在这些情况下,您几乎总是希望使用takeRetainedValue,以便Swift的ARC实现自动管理此对象的内存管理。如果使用takeUnretainedValue,除非手动释放通过符合Create Rule的方法获得的与此对象关联的内存,否则将泄漏内存。