• Swift3(非)逃逸闭包


    Swift3.0更新以后对闭包的属性进行了调整,之前默认的是逃避策略,如果是一个非逃逸闭包则需加上@noescape。在更新之后,则恰恰相反。
    

    这两种属性的区别在于,non-escape function执行完,closure也执行结束,closure里面的对象不会被retain;
    反之,closure执行时间不确定,不能保证在function结束后也结束,需要显示的调用self对象,这里有会循环应用的问题。

    所以在处理@escaping的闭包时应该注意:

    func aAction(block: @escaping () -> Void) {}
    
    func bAction() {
        //block中有self对象时,要弱引用self
         a.aAction { [weak self] in
             guard let strongSelf = self else { return }
             strongSelf.b = "xxx"
         }
    }
    
    
  • 相关阅读:
    本学期3个sprint的团队贡献分
    sprint3个人总结
    12.17第九天
    阶段二总结
    sprint 1 总结
    冲刺一
    课程设计团队信息
    学习进度表
    Sprint3总结
    Res_Orders_02
  • 原文地址:https://www.cnblogs.com/horo/p/6822677.html
Copyright © 2020-2023  润新知