在YYKit中看到這樣的宏
#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
然后在處理block循環(huán)引用的時候就可以這樣
MyObject *obj = [[MyObject alloc] init];
self.myObj = obj;
@weakify(self)
self.myObj.test = ^(){
@strongify(self)
self.mLabel.text = @"aaa";
};
這樣使用非常方便,在block中依然可以用self
但是目前尚未讀懂這個宏。。希望知道的留個言。弄清楚之后也會更新此博客。
比如
//weakify
try{} @finally{} {} __weak __typeof__(object) weak##_##object = object;
//strongify
autoreleasepool{} __typeof__(object) object = weak##_##object;
這里面try{} @finally{} {}是什么作用?不會是只為了讓前面多個@?我試著把try{} @finally{} {}去掉,autoreleasepool{}去掉,依然可以正常使用。這兩句是干什么的?