美文网首页
@inline inout

@inline inout

作者: 曹来东 | 来源:发表于2019-06-24 16:35 被阅读0次

    内联函数

    如果开启了编译器优化(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参数的是计算属性,有监听属性等内容,其本质是非引用传递.

    相关文章

      网友评论

          本文标题:@inline inout

          本文链接:https://www.haomeiwen.com/subject/baroqctx.html