- 在使用Block之前需要對(duì)其作判空處理
if (_completionBlock) {
_completionBlock();
}
- 在MRC的編譯環(huán)境下脐往,Block如果作為成員參數(shù)要Copy一下扳埂,講棧上的Block拷貝到堆上 http://www.cnblogs.com/biosli/archive/2013/05/29/iOS_Objective-C_Block.html
- Block作為類對(duì)象的成員變量聂喇,在Block中直接使用類對(duì)象會(huì)造成循環(huán)引用問(wèn)題。解決方法:
3.1. 執(zhí)行完Block后希太,將Block置空(NULL); 在MRC下需要先release誊辉。
3.2. 使用形參的方式避免直接使用Block塊外的類對(duì)象。
3.3. 使用__weak 的方法邀跃。 - 在多線程環(huán)境下(Block中的weakSelf有可能被析構(gòu)的情況下)拍屑,需要將weakSelf再次引用一次(將weakSelf轉(zhuǎn)位strong指針)來(lái)防止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/ 這是個(gè)工具網(wǎng)站浆西,我每次寫block的時(shí)候都會(huì)用到近零。