轉(zhuǎn)自:http://blog.csdn.net/zhuoyuetec/article/details/43405137
在block中調(diào)用self會引起循環(huán)引用,但是在block中需要對weakSelf進(jìn)行strong,保證代碼在執(zhí)行到block中,self不會被釋放彤枢,當(dāng)block執(zhí)行完后,會自動釋放該strongSelf
__weak typeof(self) _self
= self; 外部weak
__strong typeof(_self) self = _self
; 內(nèi)部strong
#ifndef weakify
#if DEBUG
#if __has_feature(objc_arc)
#define weakify(object) autoreleasepool{} __weak __typeof__(object) weak##_##object = object;
#else
#define weakify(object) autoreleasepool{} __block __typeof__(object) block##_##object = object;
#endif
#else
#if __has_feature(objc_arc)
#define weakify(object) try{} @finally{} {} __weak __typeof__(object) weak##_##object = object;
#else
#define weakify(object) try{} @finally{} {} __block __typeof__(object) block##_##object = object;
#endif
#endif
#endif
#ifndef strongify
#if DEBUG
#if __has_feature(objc_arc)
#define strongify(object) autoreleasepool{} __typeof__(object) object = weak##_##object;
#else
#define strongify(object) autoreleasepool{} __typeof__(object) object = block##_##object;
#endif
#else
#if __has_feature(objc_arc)
#define strongify(object) try{} @finally{} __typeof__(object) object = weak##_##object;
#else
#define strongify(object) try{} @finally{} __typeof__(object) object = block##_##object;
#endif
#endif
#endif
用的時候就
@weakify(self)
@strongify(self)