我们如果在代码中频繁的使用block的话就会注意到block的循环引用的问题这里就要 用到了self的弱引用。弱引用的形式有很多常见的有三种:若果self的类型是UIViewController 则可以如下:
- 方法1
__weak UIViewController * weakSelf = self;
- 方法2
__weak typeof(self) weakSelf = self;
这里着重的介绍一下这个经常用的typeof()这事C语言中的一个函数,它可以锁区括号内的表达式的类型。可以理解为OC重的id 它可以获取到当前self的类型的指针,这样的话就可以写成宏表达式在其它的地方使用起来就会方便很多。
- 方法3
@weakfy(self)
Block = ^{
@strongfy(self)
self.view = ........
}
这个黑魔法的写法我首次看到是在RAC中的只要记得这个也是对self的一个弱引用就好了。而且,这两个必须是要成对出现的。要不然会报错。
具体的实现原理小弟还未搞懂。有时间在做研究谢谢。