关于self的弱引用

我们如果在代码中频繁的使用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的一个弱引用就好了。而且,这两个必须是要成对出现的。要不然会报错。

具体的实现原理小弟还未搞懂。有时间在做研究谢谢。

你可能感兴趣的:(关于self的弱引用)