简单区分下delegate. NSNotifiction. Block.KVO

代理

代理是一对一的关系.
delegate 需要定义协议方法并且实现协议方法,会使代码结构变复杂.
delegate 的执行效率没有Block的高.

Bloc

代码结构更加紧凑,不需要额外定义方法.
需要注意防止循环引用,使用__weak关键字修饰.
如果需要在块中修改外部变量时,需要对外部变量使用__block关键词修饰.

NSNotifiction

NSNotifiction是通知,是一对多的使用场景.
在某些情况下KVO和NSNotifiction是一样的,都是状态变化之后告知对方.
NSNotifiction的特点是,就是需要 被观察者先主动发出通知,然后观察者注册监听后再来进行响应,比KVO多了发送通知的一步,但其优点是监听不局限于属性的变化,还可以对多种多样的状态 变化进行监听 ,监听范围广,使用也更灵活.

KVO

KVO就是cocoa框架实现的观察者模式,一般同KVC搭配使用,通过KVO可以监测一个值的变化:如view的高度变化 .
是一对多的关系,一个值的变化会通知所有的观察者.
如果需要在块中修改外部变量时,需要对外部变量使用__block关键词修饰.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 设计模式 1.delegate和notification什么区别,什么情况使用? 2.描述一下KVO和KVC。 K...
    丶逐渐阅读 1,977评论 3 2
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,209评论 30 471
  • 一、深复制和浅复制的区别? 1、浅复制:只是复制了指向对象的指针,即两个指针指向同一块内存单元!而不复制指向对象的...
    iOS_Alex阅读 1,423评论 1 27
  • 《招聘一个靠谱的 iOS》—参考答案(下) 说明:面试题来源是微博@我就叫Sunny怎么了的这篇博文:《招聘一个靠...
    Mominglaile阅读 1,237评论 0 1
  • 《招聘一个靠谱的 iOS》—参考答案(下) 说明:面试题来源是微博@我就叫Sunny怎么了的这篇博文:《招聘一个靠...
    YuWenHaiBo阅读 4,067评论 0 16