00Swift中閉包的循環(huán)引用

1.閉包的循環(huán)引用

//Created by zhangmi on 15/2/28.
//Copyright ? 2016年Paramount Pictures. All rights reserved.

importUIKit
classViewController: UIViewController{
//vc -- strong --閉包
//閉包-- strong -- vc相互強引用
//定義屬性閉包

//swift屬性的默認就是強引用
var finished Callback: ((res:String) -> ())?
   override func viewDidLoad() {
super.viewDidLoad()
1.1swift中特殊的寫法1
//weak var weakSelf = self
loadData { [unownedself] (result)in
   print(result,self)}}

//[unowned self]和__unsafe__retained作用類似-->對象被回收時,內(nèi)存地址不會自動指向nil,會造成野指針訪問

1.2.swift中解決辦法1
func method InSwift2() {

//2.swift中特殊的寫法

//weak var weakSelf = self
loadData { [unownedself] (result)in
print(result,self)}}

//2. swift中解決辦法1
//[weak self]和__weak typedod(self)作用類似-->對象被回收時,內(nèi)存地址不會自動指向nil,更加安全,推薦使用這種方式

funcmethodInSwift1() {

//1.swift中特殊的寫法

//weak var weakSelf = self
loadData { [weakself] (result)in
print(result,self)
    }
}

2.解決循環(huán)引用的方式

funcmethodInOC() {

//1.仿照oc解決
//弱引用的對象有一次執(zhí)行nil的機會

weak var weakSelf =self
loadData { (result)in
print(result, weakSelf)
    }
}
funcloadData(finished: (result:String) -> ()) {
finished  Callback = finished
dispatch_async(dispatch_get_global_queue(0,0)){
NSThread.sleepForTimeInterval(2)
//在主隊列回調(diào)
dispatch_async(dispatch_get_main_queue(),{
//執(zhí)行閉包
finished(result:"辦證: 12345678910")
        })
    }
}
//dealloc oc
//析構函數(shù)
deinit{
    print("我已經(jīng)銷毀")}

3. 三種解決辦法的總結:

//1.解決循環(huán)引用的方式,仿照oc解決
//弱引用的對象有一次執(zhí)行nil的機會

 funcmethodInOC() {
     *weak var weakSelf =self*
loadData { (result)in
     print(result, weakSelf)
}

//2. swift中解決辦法1
swift中特殊的寫法
//[weak self]和__weak typedod(self)作用類似-->對象被回收時,內(nèi)存地址不會自動指向nil,更加安全,推薦使用這種方式

 funcmethodInSwift1() {
    loadData{ [*weak self]* (result)in
        print(result, self)
    }
}

//3.swift中解決辦法2
[unowned self]和__unsafe__retained作用類似-->對象被回收時,內(nèi)存地址不會自動指向nil,會造成野指針訪問

 funcmethodInSwift2() {
    loadData{ [unowned  self] (result)in
            print(result, self)
     }
 }
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容