swift - swift 注释 api 的定义

标签 swift

我正在阅读此链接 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/

相关文章:

ios - 如何在iOS swift中获取AVAHI发布的服务的IP和PORT?

ios - 尝试访问分段控制索引时,Swift 抛出错误

ios - 全局变量不会保存在 Swift 中

ios - 使用textview渲染图像

swift - 如何保存当前关卡

swift - base64 编码的 PDF 无法在 swift 中解码

arrays - 使用变量属性在 Swift 中对数组进行排序?

swift - Metal Compute - 排队一个已经排队的命令缓冲区

swift - Xcode:运算符后的预期表达式

iOS 8 Google Maps SDK myLocation 图标气泡图形故障