// 判断 block 是否被引用
#define lgf_HaveBlock(block, ...) if (block) { block(__VA_ARGS__); };
// block 防止强引用
#ifndef lgf_Weak
#if DEBUG
#if __has_feature(objc_arc)
#define lgf_Weak(object) autoreleasepool{} __weak __typeof__(object) weak##_##object = object;
#else
#define lgf_Weak(object) autoreleasepool{} __block __typeof__(object) block##_##object = object;
#endif
#else
#if __has_feature(objc_arc)
#define lgf_Weak(object) try{} @finally{} {} __weak __typeof__(object) weak##_##object = object;
#else
#define lgf_Weak(object) try{} @finally{} {} __block __typeof__(object) block##_##object = object;
#endif
#endif
#endif
#ifndef lgf_Strong
#if DEBUG
#if __has_feature(objc_arc)
#define lgf_Strong(object) autoreleasepool{} __typeof__(object) object = weak##_##object;
#else
#define lgf_Strong(object) autoreleasepool{} __typeof__(object) object = block##_##object;
#endif
#else
#if __has_feature(objc_arc)
#define lgf_Strong(object) try{} @finally{} __typeof__(object) object = weak##_##object;
#else
#define lgf_Strong(object) try{} @finally{} __typeof__(object) object = block##_##object;
#endif
#endif
#endif
// 具体使用
typedef void(^test)(NSString *ff, NSString *gg);
@interface ViewController ()
@property (copy, nonatomic) test tt;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
@lgf_Weak(self);
self.tt = ^(NSString *ff, NSString *gg) {
@lgf_Strong(self);
// self...
};
lgf_HaveBlock(self.tt, @"111",@"222");
}
block 好用的宏 摘自最新版YYKit,作者在原宏基础上加入了ARC判断使其更加全面
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 『导言』 亲们,可能在开发中遇到变态需求,在ARC或者MRC之间切换?那怎么宏代码判断当前环境是ARC还是MRC?...
- 高考刚刚结束,广东沿海地区就刮起了台风,这两者没有联系,但是也算是给考生们寒窗苦读的一次洗礼。前阵子刚刚给储备干部...
- 好看的皮囊千篇一律,率真睿智幽默有趣的灵魂实属难得。诗人余秀华显然是后者。 《摇摇晃晃的人间》头一拨儿点映活动没赶...