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