代理、Block、通知、KVO

1.代理
代理是:。

2.Block
delegate和block的作用都是用于两个类之间的回传数据,即当一个类创建了另一个类的实例的时候,想从被创建的类传递信息到创建它的类(例:比较常见的是,tableview类中创建的cell类想将cell类的事件传递到tableview类,例2:修改信息的页面,比如修改用户名是点击用户名回到下一级页面修改,修改后返回到本级。也要用的数据的回传)。
a、delegate和block的差别:
1、delegate运行成本低。block成本很高的。
block出栈需要将使用的数据从栈内存拷贝到堆内存,当然对象的话就是加计数,使用完或者block置nil后才消除;delegate只是保存了一个对象指针,直接回调,没有额外消耗。相对C的函数指针,只多做了一个查表动作 。

3.代理和Block的区别:http://www.jianshu.com/p/4e829fa34494

4.通知;
它是一个单例对象,允许当事件发生时通知一些对象。它允许我们在低程度耦合的情况下,满足控制器与一个任意的对象进行通信的目的。这种模式的基本特征是为了让其他的对象能够接收到在该controller中发生某种事件而产生的消息,controller用一个key(通知名称)。这样对于controller来说是匿名的,其他的使用同样的key来注册了该通知的对象(即观察者)能够对通知的事件作出反应。

优势:1.不需要编写多少代码,实现比较简单;2.对于一个发出的通知,多个对象能够做出反应,即1对多的方式实现简单

缺点:1.在编译期不会检查通知是否能够被观察者正确的处理;
2.通知发出后,controller不能从观察者获得任何的反馈信息。
3.在释放注册的对象时,需要在通知中心取消注册;
4.在调试的时候应用的工作以及控制过程难跟踪;

5.代理和通知:
我个人不是很喜欢使用通知中心。我发现用通知中心很难把握应用的执行流程。UserInfo dictionaries的keys到处传递导致失去了同步,而且在公共空间需要定义太多的常量。对于一个工作于现有的项目的开发者来说,如果过分的使用通知中心,那么很难理解应用的流程。
我觉得使用命名规则好的协议和协议方法定义对于清晰的理解controllers间的通信是很容易的。努力的定义这些协议方法将增强代码的可读性,以及更好的跟踪你的app。
当然会有delegation模式不适合的例外情况出现,而且notification可能更加有效。例如:应用中所有的controller需要知道一个事件。然而这些类型的场景很少出现。另外一个例子是当你建立了一个架构而且需要通知该事件给正在运行中应用。
根据经验,如果是属性层的时间,不管是在不需要编程的对象还是在紧紧绑定一个view对象的model对象,我只使用观察。

6.KVO是。。。.
它只能用来对属性作出反应,而不会用来对方法或者动作作出反应。

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

推荐阅读更多精彩内容

  • 是什么/特性/优点,缺点。 代理:delegate是委托模式.委托模式是将一件属于委托者做的事情,交给另外一个被委...
    my__life阅读 4,565评论 0 0
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,313评论 30 472
  • iOS网络架构讨论梳理整理中。。。 其实如果没有APIManager这一层是没法使用delegate的,毕竟多个单...
    yhtang阅读 10,652评论 1 23
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,328评论 19 139
  • 设计模式 1.delegate和notification什么区别,什么情况使用? 2.描述一下KVO和KVC。 K...
    丶逐渐阅读 5,940评论 3 2