1. 程式人生 > >ios-Swift中解除迴圈引用的三種方式

ios-Swift中解除迴圈引用的三種方式

1、加一個標記,表示裡面用到的self都是弱引用

     test4 {[weak self] (name)->() in
        
        //self?表示如果物件一旦被釋放了,就不再訪問其屬性或者方法
        
        print(self?.view)
        
        }
2、OC中的傳統的方法
 //由於weak修飾的屬性在執行時可能會改變所以要用var,因為weak所指向的物件被釋放之後,weakSelf就變成了nil
        weak var weakSelf = self
        test4 { (name)->Void in
            
            //weakSelf?表示物件一旦被釋放,不再去訪問其屬性或者方法
            print(weakSelf?.view)
        }
3、在Swift中也是加一個標記,[unowed self] 表示閉包中的self都是assign的,如果self被釋放之後,閉包中的self的地址不會修改,會出現野指標錯誤
 test4 {[unowned self] (name)->() in
            print(self.view)
        }