Ang*_*han 3 memory-management retained-in-memory unsafe-unretained swift
takeUnretainedValue和之间有什么区别takeRetainedValue?根据Apple的文档:
这两种方法都返回原始的,未包装的对象类型.您可以根据要调用的API是否返回未保留或保留的对象来选择要使用的方法.
但是,我如何知道非托管对象是未保留对象还是保留对象?例如,该方法ABAddressBookCreateWithOptions:从AddressBook框架返回一个非托管对象ABAddressBook,其中一些教程认为这是一个保留的对象.使用时ALAsset,该方法thumbnail返回一个非托管对象CGImage,一些教程认为这是一个未保留的对象.
我将感激你的帮助.
我如何知道非托管对象是未保留对象还是保留对象?
这取决于您使用的API.
这里有一些约定:Core Foundation的所有权Polocy /内存管理编程指南
基本上,如果函数名称包含单词"Create"或"Copy",请使用.takeRetainedValue().如果函数名称包含单词"Get",请使用.takeUnretainedValue().
并且,如果它不包含,据我所知,我们仍然可以.takeUnretainedValue()在几乎所有情况下使用.
但是,每个规则都有异常:)例如,请参阅:
Swift UnsafeMutablePointer <Unmanaged <CFString>?>分配和打印