block防止循環引用的三種方式

//解決循環引用的第一種方式

    //iOS 5.0 引用來解決循環引用的方式  和weak屬性關鍵字作用類似

    //當對象被系統回收時  對象的地址 會自動指向 nil  不會出現野指針訪問

    __weak typeof(self) weakSelf = self;

 //解決循環引用的第二種方式

    //    __weak typeof(self) weakSelf = self;

    //會引起 EXC_BAD_ACCESS 錯誤 是MRC 時代最常見的錯誤  野指針  --> 壞地址訪問

    // 和 assgin屬性關鍵字的作用類似  對象被系統回收時 對象的地址不會自動指向nil

    // iOS4.0 和block 一起推出的 用來解決循環引用的

    __unsafe_unretained typeof(self) weakSelf = self;

    //第三種解決方式

    //weak-strong-dance wwdc 推出的解決方式  在AFN中被大量的運用到

    __weak typeof(self) weakSelf = self;

    [self.tools loadData:^(NSString *result) {

        //閉包中對弱引用的weakSelf 在強引用一下

        __strong typeof(weakSelf) strongSelf = weakSelf;

        NSLog(@"%@ %@",result,strongSelf);

    }];


 VC --  strong -- tools 

 tools --strong - block

 block -- strong -- vc


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章