@inline inout

内联函数

如果开启了编译器优化(Release模式默认会开启优化),编译器会自动将某些函数变成内联函数.即将函数调用展开为函数体.

开启了编译器优化路径:


image.png
  • 函数体比较长
  • 包含递归调用
  • 包含动态派发

以上这些情况比编译器不会自动内联

//永远不会被内联(即使开启了编译器优化)
@inline(never) func test() {
        print("1")
    }
//开启编译器优化后.即使代码很长,也会被内联(递归调用函数,动态派发的函数除外)
@inline(__always) func test() {
        print("1")
    }

Release模式下,编译器已经开启优化,会自动决定那些函数需要内联,因此没必要使用@inline

输入输出参数(In - Out Parameter)

  • 可变参数不能标记为inout
  • inout参数不能有默认值
  • inout参数只能传入可以被多次赋值的(不能是 let)
func swapValues(_ v1: inout Int,_ v2: inout Int) {
        (v1,v2) = (v2,v1)
    }
var num1 = 1
var num2 = 1
swapValues(&num1, &num2)
  • 上述代码中的inout参数的本质是地址传递(引用传递)
  • 如果传递给inout参数的是计算属性,有监听属性等内容,其本质是非引用传递.
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容