美文网首页
iOS WeakSelf宏的进化

iOS WeakSelf宏的进化

作者: 石昊羿 | 来源:发表于2018-02-18 18:49 被阅读0次

(转载:  https://www.jianshu.com/p/d0ef07cbd430)

//联系人:石虎 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条的定义方式

谢谢!!!

相关文章

网友评论

      本文标题:iOS WeakSelf宏的进化

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