iOS开发技巧iOS开发iOS学习

Block,Delegate ,Notification 各自特

2017-01-18  本文已影响222人  夏天的枫_

一、Block

它是带有局部变量的匿名函数,它是一段代码块,与C语言中的函数指针类似,可当做参数进行传值,且可以没有名字。(在我另外一篇文章中有详细介绍)

二、Delegate

Delegate (委托/代理)是 iOS 开发中常用的设计模式,表示将一个对象的部分功能转交给另一个对象。借助 protocol 可以很方便的实现这种设计模式。
通常,一个delegate的使用过程,需要经过五步:

  1. 创建一个 delegate;
    
  2. 委托者声明一个delegate;

  3. 委托者调用delegate内的方法(method);

  4. 被委托者设置delegate,以便被委托者调用;

  5. 被委托者实现Delegate 所定义的方法。

三、Notification

允许当事件发生时通知一些对象。它允许我们在低程度耦合的情况下,满足控制器与一个任意的对象进行通信的目的。这里可能会和KVO(简直观察)混淆,Notification 和 KVO 都是观察着模式,侧重点不一样。

通知,是Model与Controller通信的方式之一。一般是Model发送变化的时候,会发送通知告诉Controller,Controller再做相应的处理。需要先往通知中心里面注册观察者,然后在合适的时机,通知中心post通知,观察者做对应的处理,当观察者将要释放的时候,从通知中心移除观察者。

KVO,也是M与C通讯的方式。一般是C去观察M的某个属性,某个属性发生变化之后,C做出相应的处理,当C将要释放的时候,M移除观察者。

通知往往用于多对多的场景,多个观察者观察一个通知,一旦这个通知被通知中心post,所有观察者都可以做出响应。具体的实现流程是:(1)通知中心通过addObserver方法添加观察者,其实是把观察者和通知进行绑定,多次使用addObserver方法可以为同一个通知添加多个观察者。(2)通知中心发送通知。(3)各个观察者做各自的处理。(4)在观察者销毁之前(dealloc中),从通知中心移除观察者。

KVO多用于1对1的场景,一个对象去观察另外一个对象的属性值有没有发生变化,一旦发生变化,观察者做出响应。具体的流程是:(1)被观察者添加观察者,指定观察者观察的属性。(2)被观察者的属性在某一时间发生了变化。(3)观察者做出响应。(4)在观察者销毁之前,先移除观察者。

KVO其实也可以1对多,就是多个观察者观察同一个对象同一个属性的变化。KVO和通知给人的感觉一个主动通知(通知会由通知中心主动post),一个是被动通知(KVO,观察者一直盯着属性变没变,一旦变化,自己就做出响应。被观察的对象不是主动告知你我变了)。

总结

鄙人理解深度就到此了,若有理解不正之处,欢迎拍砖指正,共同进步,跪谢!
上一篇 下一篇

猜你喜欢

热点阅读