您的位置:首页 > 移动开发 > Swift

swift中解决循环引用的方法

2016-07-16 20:30 441 查看
     //
方法1: OC 的方法

        // weakSelf -> ViewController? 
        // self - ViewController
        // 'weak' must be a mutable variable, because it may change at runtime
        // weak 的变量在运行时有可能被设置为 nil,weak不能使用 let
//        weak var weakSelf = self
//        loadData { (result) -> () in
//            print(result)
//            print(weakSelf)
//        }
       
// 方法2: Swift
的方法 -
首选

        // [weak self]
表示 闭包中的 self
都是弱引用的,不需要再使用其他的变量
        // weak 的变量在运行时有可能被设置为 nil,所以闭包中的 self,都是可选的
        loadData { [weak
self] (result) -> () in
            // unexpectedly found nil while unwrapping an Optional value
            // ! 强行解包,值不存在抛出异常
            // ? 可选解包,值不存在,给nil发送消息
            print(self?.view)
        }
        
        //
方法3: [unowned self]
        // [unowned self]
和 OC 中的 assign
是一样的,对象释放之后,指针保持不变
        // 1> 闭包中不需要考虑解包的问题
        // 2> 但是如果 self
释放,会出现野指针访问
//        loadData { [unowned self] (result) -> () in
//            // EXC_BREAKPOINT 野指针访问
//            print(self.view)
//        }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息