WeakSelf StrongSelf的宏寫法

在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{}去掉,依然可以正常使用。這兩句是干什么的?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容