類似于OC的block只厘,swift閉包中也存在循環(huán)引用的問題,通常解決閉包中循環(huán)引用的方式有以下三種
(1)方式一:weak修飾
weak var weakSelf : ViewController? = self
// 閉包中如果使用當(dāng)前對(duì)象的屬性或者調(diào)用方法,必須使用self
httpTool?.loadData({ (data) -> () in
weakSelf?.view.backgroundColor = UIColor.redColor()
})
(2)方式二:[weak self]修飾
// 常用方式
httpTool?.loadData({[weak self] (data) -> () in
self?.view.backgroundColor = UIColor.redColor()
})
(3)方式三:[unowned self]修飾
httpTool?.loadData({[unowned self] (data) -> () in
self.view.backgroundColor = UIColor.redColor()
})
weak和unsafe_unretain的區(qū)別:
weak在相關(guān)對(duì)象銷毀時(shí)會(huì)自動(dòng)清空憎账,指向nil,不會(huì)導(dǎo)致野指針錯(cuò)誤;
unsafe_unretain在相關(guān)對(duì)象銷毀時(shí)不會(huì)指向nil卡辰,仍保留之前的內(nèi)存地址胞皱,當(dāng)相應(yīng)的指向中換成其它對(duì)象時(shí)邪意,就會(huì)出現(xiàn)野指針錯(cuò)誤。