我正在阅读此链接 https://developer.apple.com/library/ios/documentation/swift/conceptual/buildingcocoaapps/WorkingWithCocoaDataTypes.html在有关内存管理对象的部分中,他们讨论了带注释的 API。但是,我找不到带注释的 API 的定义。谁知道这是什么意思?
最佳答案
从本质上讲,Apple 必须检查所有 API,并使用有关参数和返回值的内存分配信息来注释每个函数。一旦完成,带注释的函数就可以更容易地在 Swift 中使用,因为编译器知道它必须做什么才能安全地在 Swift 代码和带注释的 C 代码之间来回桥接类型。
这是一个类似的带注释和未注释函数的示例。首先是 C 版本:
// Creates an immutable copy of a string.
CFStringRef CFStringCreateCopy ( CFAllocatorRef alloc, CFStringRef theString );
// Encodes an OSType into a string suitable for use as a tag argument.
CFStringRef UTCreateStringForOSType ( OSType inOSType );
这两个函数都返回一个 CFStringRef
- 一个对 CFString
的引用。 C CFString
可以桥接到 Swift CFString
实例,但这只有在方法被注解时才是安全的。以下是 Swift 版本:
// annotated: returns a memory-managed Swift `CFString`
func CFStringCreateCopy(alloc: CFAllocator!, theString: CFString!) -> CFString!
// unannotated: returns an *unmanaged* `CFString`
func UTCreateStringForOSType(inOSType: OSType) -> Unmanaged<CFString>!
如果调用第二个,则需要对结果调用 .takeRetainedValue()
或 .takeUnretainedValue()
以获得内存管理CFString
实例 - 要知道是哪一个,您必须阅读文档或了解约定以了解您返回的结果是保留的还是不保留的。通过带注释的函数,Apple 已经为您完成了这项工作。
论坛中有几个关于这个主题的帖子,因为 Apple 还通过其注释指示返回值是否应该是可选的,但他们在这一点上保持非常接近。
关于swift - swift 注释 api 的定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27072504/