iOS block的循环引用

__weak typeof(self) weakSelf = self;
self.blk = ^{
        __strong typeof(self) strongSelf = weakSelf;
        NSLog(@"Use Property:%@", strongSelf.name);
        //……
};
self.blk();

改为传参

self.blk = ^(UIViewController *vc) {
        NSLog(@"Use Property:%@", vc.name);
};
self.blk(self);

优点:

简化了两行代码,更优雅
更明确的API设计:告诉API使用者,该方法的Block直接使用传进来的参数对象,不会造成循环引用,不用调用者再使用weak避免循环

宏定义

#define WeakObj(o) autoreleasepool{} __weak typeof(o) o##Weak = o;
#define StrongObj(o) autoreleasepool{} __strong typeof(o) o = o##Weak;
@WeakObj(self);
[var setBlock:^{
    @StrongObj(self);
    [self doSomething];
}];
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Block的分类 那么这3种Block分别在哪里体现出来呢?接下来,我们通过代码来看一下: 我们稍微修改下上面的代...
    Henry_Jeannie阅读 3,685评论 2 2
  • Block概要 Block:带有自动变量的匿名函数。 匿名函数:没有函数名的函数,一对{}包裹的内容是匿名函数的作...
    zweic阅读 3,443评论 0 2
  • 《Objective-C高级编程》是一本有趣又难懂的书,全书就讲了引用计数、Block、GCD三个概念,有趣是因为...
    kamous阅读 55,480评论 22 206
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,902评论 1 32
  • 一、童年时的伙伴,父亲从新华书店借的第一本书开始,从此就喜欢上了书。从小学四年级开始读小说,童年的我不喜欢美食,不...
    紫水晶一一1990阅读 2,540评论 0 3

友情链接更多精彩内容