takeUnretainedValue和takeRetainedValue有什么区别?

Ang*_*han 3 memory-management retained-in-memory unsafe-unretained swift

takeUnretainedValue和之间有什么区别takeRetainedValue?根据Apple的文档:

这两种方法都返回原始的,未包装的对象类型.您可以根据要调用的API是否返回未保留或保留的对象来选择要使用的方法.

但是,我如何知道非托管对象是未保留对象还是保留对象?例如,该方法ABAddressBookCreateWithOptions:AddressBook框架返回一个非托管对象ABAddressBook,其中一些教程认为这是一个保留的对象.使用时ALAsset,该方法thumbnail返回一个非托管对象CGImage,一些教程认为这是一个未保留的对象.

我将感激你的帮助.

rin*_*aro 6

我如何知道非托管对象是未保留对象还是保留对象?

这取决于您使用的API.

这里有一些约定:Core Foundation的所有权Polocy /内存管理编程指南

基本上,如果函数名称包含单词"Create"或"Copy",请使用.takeRetainedValue().如果函数名称包含单词"Get",请使用.takeUnretainedValue().

并且,如果它不包含,据我所知,我们仍然可以.takeUnretainedValue()在几乎所有情况下使用.

但是,每个规则都有异常:)例如,请参阅:
Swift UnsafeMutablePointer <Unmanaged <CFString>?>分配和打印