示例代碼:
import UIKit
class ViewController: UIViewController {
// 定義閉包
var callback:(()->())?
override func viewDidLoad() {
super.viewDidLoad()
// 閉包實(shí)現(xiàn)
callback = {
print(weakSelf?.view)
}
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
// 執(zhí)行閉包
callback?()
}
deinit{
print("ViewController再見(jiàn)")
}
}
分析:
當(dāng)前控制器 強(qiáng)引用了閉包
閉包強(qiáng)引用self
A -> B B -> A
解決循環(huán)引用:
- 方法01(仿照OC的寫(xiě)法) (等同于OC中 __weak)
weak var weakSelf = self
callback = {
print(weakSelf?.view)
}
- 方法02 (等同于OC中 __weak) (iOS時(shí)間- 5.0) 推薦方式
callback = {[weak self] in
print(self?.view)
}
- 方法03 (等同于OC中 __unsafe_unretained)(iOS時(shí)間- 4.0)
缺點(diǎn):self不是可選項(xiàng),如果self已經(jīng)被釋放,則出現(xiàn)野指針訪(fǎng)問(wèn)
callback = {[unowned self] in
print(self.view)
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。