4. 代理

2020-06-24  本文已影响0人  如果大雨落下
图片.png
代理是一种设计模式
代理包括委托对象,代理对象,协议3个部分
  1. 协议: 就是规则,置顶委托方可以委托的方法,代理方需要实现的方法,协议中不能由具体的实现, 协议可以多继承,一个类可以继承多个协议,协议也可以继承多个协议
  2. 委托对象:就是调用协议方法的一方
  3. 代理对象: 实现协议方法的一方
代理属性使用weak,举例:
  1. 在我们的tableViewController中,控制器的view就是tableView,这就相当于tableViewController强引用着tableView(代理对象)。
  2. 当我们设置delegate的时候,一般都是让tableViewController成为代理,这个时候代理如果也使用strong,那么tableView的delegate又强引用着tableViewController,所以导致循环引用,因此代理得用weak!
  3. 为什么不用assign
    weak和assign是一种“非拥有关系”的指针,通过这两种修饰符修饰的指针变量,都不会改变被引用对象的引用计数。但是在一个对象被释放后,weak会自动将指针指向nil,而assign则不会。在iOS中,向nil发送消息时不会导致崩溃的,所以assign就会导致野指针的错误
代理与block对比
上一篇下一篇

猜你喜欢

热点阅读