// 判断 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判断使其更加全面
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 『导言』 亲们,可能在开发中遇到变态需求,在ARC或者MRC之间切换?那怎么宏代码判断当前环境是ARC还是MRC?...
- 好看的皮囊千篇一律,率真睿智幽默有趣的灵魂实属难得。诗人余秀华显然是后者。 《摇摇晃晃的人间》头一拨儿点映活动没赶...