Block的使用中的注意點

  1. 在使用Block之前需要對其作判空處理
if (_completionBlock) {

        _completionBlock();

    }
  1. 在MRC的編譯環(huán)境下,Block如果作為成員參數(shù)要Copy一下,講棧上的Block拷貝到堆上 http://www.cnblogs.com/biosli/archive/2013/05/29/iOS_Objective-C_Block.html
  2. Block作為類對象的成員變量,在Block中直接使用類對象會造成循環(huán)引用問題。解決方法:
    3.1. 執(zhí)行完Block后,將Block置空(NULL); 在MRC下需要先release。
    3.2. 使用形參的方式避免直接使用Block塊外的類對象。
    3.3. 使用__weak 的方法。
  3. 在多線程環(huán)境下(Block中的weakSelf有可能被析構(gòu)的情況下),需要將weakSelf再次引用一次(將weakSelf轉(zhuǎn)位strong指針)來防止weakSelf被析構(gòu)的可能; ——weak–strong dance
    ///AFNetworking,堪稱使用weak–strong dance的經(jīng)典。
    __weak __typeof(self)weakSelf = self;

    AFNetworkReachabilityStatusBlock callback = ^(AFNetworkReachabilityStatus status) {

        __strong __typeof(weakSelf)strongSelf = weakSelf;

        strongSelf.networkReachabilityStatus = status;

        if (strongSelf.networkReachabilityStatusBlock) {

            strongSelf.networkReachabilityStatusBlock(status);

        }

    };

參考:

http://blog.csdn.net/fhbystudy/article/details/17350951

http://stackoverflow.com/questions/10892361/generic-typeof-for-weak-self-references

http://stackoverflow.com/questions/14877415/difference-between-typeof-typeof-and-typeof-objective-c

http://rocry.com/2012/12/18/objective-c-type-of/

http://fuckingblocksyntax.com/ 這是個工具網(wǎng)站,我每次寫block的時候都會用到。

?著作權(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)容

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