iOS block的循環(huán)引用

__weak typeof(self) weakSelf = self;
self.blk = ^{
        __strong typeof(self) strongSelf = weakSelf;
        NSLog(@"Use Property:%@", strongSelf.name);
        //……
};
self.blk();

改為傳參

self.blk = ^(UIViewController *vc) {
        NSLog(@"Use Property:%@", vc.name);
};
self.blk(self);

優(yōu)點:

簡化了兩行代碼,更優(yōu)雅
更明確的API設(shè)計:告訴API使用者,該方法的Block直接使用傳進來的參數(shù)對象,不會造成循環(huán)引用,不用調(diào)用者再使用weak避免循環(huán)

宏定義

#define WeakObj(o) autoreleasepool{} __weak typeof(o) o##Weak = o;
#define StrongObj(o) autoreleasepool{} __strong typeof(o) o = o##Weak;
@WeakObj(self);
[var setBlock:^{
    @StrongObj(self);
    [self doSomething];
}];
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • Block的分類 那么這3種Block分別在哪里體現(xiàn)出來呢?接下來,我們通過代碼來看一下: 我們稍微修改下上面的代...
    Henry_Jeannie閱讀 629評論 2 2
  • Block概要 Block:帶有自動變量的匿名函數(shù)。 匿名函數(shù):沒有函數(shù)名的函數(shù),一對{}包裹的內(nèi)容是匿名函數(shù)的作...
    zweic閱讀 548評論 0 2
  • 《Objective-C高級編程》是一本有趣又難懂的書,全書就講了引用計數(shù)、Block、GCD三個概念,有趣是因為...
    kamous閱讀 55,523評論 22 206
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,629評論 1 32
  • 一、童年時的伙伴,父親從新華書店借的第一本書開始,從此就喜歡上了書。從小學四年級開始讀小說,童年的我不喜歡美食,不...
    紫水晶一一1990閱讀 352評論 0 3

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