iOS WeakSelf宏的进化

作者: 石虎132 | 来源:发表于2018-02-15 23:41 被阅读175次

    //联系人:石虎 QQ:1224614774 昵称:嗡嘛呢叭咪哄

    一、概念

    1.防止如block的循环引用时,会使用__weak关键字做如下定义:

      __weak typeof(self) weakSelf = self;

      使用:  [weakSelf addSubViews];

    2.写成宏的方法:

      #define WeakSelf     __weak typeof(self) weakSelf = self;

    使用:  [WeakSelf addSubViews];

    3.宏的优化,让部分的变量也可以使用weak

      #define WeakObj(o)     __weak typeof(o) o##Weak = o;

    使用: WeakObj(self)

      [selfWeak addSubViews];

    4.利用了@autoreleasepool{}这个系统的关键字来实现,添加了@符号在前面,看起来更原生

      #define WeakObj(o) autoreleasepool{} __weak typeof(o) o##Weak = o;

      使用:

      @WeakObj(self)

      [selfWeak addSubViews];

    5.利用了try{}@finally{}这个系统的关键字来实现,添加了@符号在前面,看起来更原生

      #define WeakObj(o) try{}@finally{} __weak typeof(o) o##Weak = o;

      使用:

      @WeakObj(self)

      [selfWeak addSubViews];

    注意:

      1.这部分空的@try或者空的@autoreleasepool会在编译时被优化掉,不必担心性能问题。

      2.实际开发中常用3条和5条的定义方式

    谢谢!!!

    相关文章

      网友评论

      • Mario_ZJ:您好,请问第四条加@autoreleasepool{}和第五条加try{}@finally{}比第三条有什么好处或者优势?不是很理解为什么这样写,求解惑,谢谢!
        Mario_ZJ:@石虎132 谢谢!赞赞赞!
        石虎132:@竹间溪流 建议使用第三条就可以,方便
        石虎132:@竹间溪流 第4 和5条 这样写 目的是:添加了@符号在前面,看起来更原生

      本文标题:iOS WeakSelf宏的进化

      本文链接:https://www.haomeiwen.com/subject/nqiutftx.html