37D10644-6B3C-408D-9EFB-4B2051E12DAE.png
//創(chuàng)建一個(gè)導(dǎo)航欄控制器,控制器跳轉(zhuǎn)跳轉(zhuǎn)的controller內(nèi)容如下---以下代碼內(nèi)容為循環(huán)引用
//創(chuàng)建一個(gè)屬性
var completionCallBack:(()->())?
override func viewDidLoad()
{
super.viewDidLoad()
//在block中如果出現(xiàn)self. 需要注意
//循環(huán)引用,單方向是不會(huì)產(chǎn)生引用的
//只是閉包對(duì)slef執(zhí)行了copy,閉包執(zhí)行完成后會(huì)自動(dòng)銷毀,同時(shí)釋放對(duì)self的引用
//如果要循環(huán)應(yīng)用,在閉包的同時(shí)用self引用
LoadData {
print(self.view)
}
}
func LoadData(completion:() ->()) -> ()
{
//使用屬性記錄閉包 -> self對(duì)閉包引用了
completionCallBack = completion //如果不寫此句則不會(huì)實(shí)現(xiàn)循環(huán)引用
//異步
DispatchQueue.global().async {
print("耗時(shí)操作")
DispatchQueue.main.async{
//回調(diào) 執(zhí)行閉包
completion()
}
}
}
//類似OC的dealloc
deinit {
print("走了")
}