美文网首页
2019-09-27swift内嵌函数内存安全

2019-09-27swift内嵌函数内存安全

作者: zheNgHH | 来源:发表于2019-09-28 00:05 被阅读0次

一:内嵌函数引用inout的参数时不能是逃逸的

func func1(inoutPara para : inout Int) {       

para = 3   

    func nestFun() ->  () -> Int{                                  

        return { 

            return para + 1

        }   

    }   

    nestFun() 

}

编译器会报错:Escaping closure captures 'inout' parameter 'para'

二:如果不对inout参数进行修改,可以采用这种形式解决:

 func nestFun() ->  () -> Int{            

        para = 4                     

        return {

            [para] in

            return para + 1

        }    

    }    

如果对inout参数进行修改,可以采用复制inout参数修改后再赋值给inout参数这种形式解决:

func func2(queue:DispatchQueue,inoutPara para :inoutInt) {

   var localX = para

    defer{ para = localX }

    // Operate on localX asynchronously, then wait before returning.

    queue.async { someMutatingOperation(&localX) }

    queue.sync{}

}

详细文档 Memory Safety.

三:func中不可再操作inout的原变量

var para=5

func inoutfunc(inoutpara :inoutInt) {

    print(inoutpara)

    print(para)

}

inoutfunc(inoutpara: &para)

报错:error: Execution was interrupted,reason: signal SIGABRT.

The process has been left at the point where it was interrupted,use "thread return -x" to return to the state before expression evaluation.

上例中,不可使用print(para)语句

相关文章

  • 2019-09-27swift内嵌函数内存安全

    一:内嵌函数引用inout的参数时不能是逃逸的 func func1(inoutPara para : inout...

  • python 闭包 closure 总结

    1.内嵌函数的非本地变量 在另一个函数里面定义的函数,被称为内嵌函数。内嵌函数可以访问闭合范围内(就是外部函数范围...

  • inline函数

    宏函数的优点: 内嵌代码,避免压栈,出栈的开销 缺点: 只能进行简单的字符替换,没有类型安全检查 普通函数的优点:...

  • Python零基础入门之函数的修饰器详解!

    内嵌函数 要理解修饰器,首先要知道python的内嵌函数。 在函数内部可以创建另外一个函数,不过内部函数也只能在外...

  • (十一)函数<2>

    1.函数的参数是"函数": 进阶实例: 2.内嵌函数: 另一个实例 内嵌函数可以直接引用外部函数的指针,但是该指针...

  • Swift 中的内存安全性

    内存安全 inout 参数访问冲突 在函数体内,同时读、写 stepSize 这块内存区域。 inout 参数访问...

  • python装饰器2018-11-19

    装饰器也是个函数 装饰器有参数,参数是函数 装饰器有内嵌函数 装饰器有返回值,返回值是内嵌函数 装饰器使用时直接挂...

  • 我的Python学习之旅12

    2017.2.12 20. Globa函数 作用就是修改全局变量。 内嵌函数 闭包 闭包是一种满足特定要求的内嵌函...

  • V语言学习笔记-29不安全代码

    不安全代码 目前这块的文档还没有出来,看源代码应该是; 标注函数为不安全函数 所有手动控制内存的函数要标注为uns...

  • Closures

    广义上函数和内嵌函数都属于特殊的闭包 闭包的三种格式1-全局函数是有名字,但捕获值的闭包2-内嵌函数是有名字,可以...

网友评论

      本文标题:2019-09-27swift内嵌函数内存安全

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