互联网上的许多帖子说,我可以用以下代码返回一个未保留的图片源:
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'我做错了什么吗?或者,这种方法是否已经被移除,取而代之的是其他方法?
发布于 2015-01-06 21:09:49
只有在处理非托管对象时才使用takeUnretainedValue或takeRetainedValue (例如,某些返回Unmanaged<AnyObject>!的函数或类似的函数)。在这种情况下,这不是一个非托管对象,所以这是不需要的。
顺便说一句,当从Core Foundation函数返回名称中包含Create或Copy的对象时,此对象的所有权已转移给您,您负责释放它(请参阅Create Rule)。在这些情况下,您几乎总是希望使用takeRetainedValue,以便此对象的内存管理由Swift的ARC实现自动管理。如果使用takeUnretainedValue,除非手动释放通过符合Create Rule的方法获得的与此对象关联的内存,否则将泄漏内存。
https://stackoverflow.com/questions/27798710
复制相似问题