共计 1357 个字符,预计需要花费 4 分钟才能阅读完成。
Swift 语言有各种各样不足(或没有)文档记录的个性(attribute)放在那里等着被应用
iOS 开发交换技术群:563513413,不论你是大牛还是小白都欢送入驻,分享 BAT, 阿里面试题、面试教训,探讨技术,大家一起交流学习成长!
inline
这个个性为编译器提供了内联提醒。无效的取值是__always 和 never。除非我认为必须要用这两个值,否则就不会应用它(特地是__always)。到目前为止与其相干的规定还不是很明确,在无限的测试下,它能够失常地工作,但还要视具体情况而定。
进一步的解释:只管底层虚拟机(Low Level Virtual Machine, LLVM)有强制内联的概念,但咱们目前还不晓得这个 inline 个性是否与其间接映射,也不晓得是否存在大小方面的限度,但这将会导致编译器疏忽这一点而跳过内联。实践上说应该是这样的,但我不保障肯定是。
留神:当优化设置敞开时在调试模式下的构建将疏忽 inline。
transparent
我最后并未将这个个性列出来。该个性会导致编译器在管道(pipeline)中更早地将函数内联。它用于 [“像 +(Int, Int) 这样十分原始的函数”,而“不应该用于独立函数”]
甚至在没有优化设置的调试模式下 transparent 个性函数就会被内联,所以在调用“1+1”这样的函数的时候并不会特地慢。另外这个个性与 inline(__always)十分相似。
availability
这个个性能够用来标识某些函数只在某些平台或版本上可用。第一个参数是平台,能够用星号(*)代表所有可用,还能够是 iOS 或 OS X。因为如果须要针对不同的平台,就要指定多个 availability 属性。
如果须要示意该函数在某个给定的平台齐全不可用时,能够将第二个参数置为 unavailable。此外,还能够用 introduced,deprecated 和 obsoleted 来指定一个或是多个版本的组合:obsoleted 意味着该项曾经删除,deprecated 仅仅示意如果应用就会给予正告。最初你能够设置 message 的值,如果该项被应用了就由编译器输入。
noreturn
正如该个性所形容的那样:编译器能够假设这个函数是一个永远循环运行的终点,例如 while true {},或者假设是函数 abort 或者 exit 过程的状况。
评论者 Marco Masser 指出,如果调用另一个被标记为 noreturn 的函数,那么编译器会疏忽掉以后函数中缺失的返回值(missing return values),因为编译器了解程序的控制流。
asmname
该属性给出了函数、办法或属性实现的符号名称。如果你曾经晓得对应的函数参数及其类型,那么就能够间接调用 Swift 的外部规范库函数,甚至不必头文件,也能够不便地调用 C 语言编写的函数:
Java 代码
asmname("function") func f()
unsafe_no_objc_tagged_pointer
下面这个依然是个谜,但我猜想它是在通知 Swift 与 Objective- C 分割的时候不要应用 tagged pointer。
semantics
参数看起来像是 array.mutate_unknown 或 array.init 这样的字符串数组。想必这是要通知编译器(或动态分析器)函数是如何工作的。