iOS 观察者模式

iOS设计模式之观察者模式

定义

  • 什么是观察者模式?我们先打个比方,这就像你订报纸。比如你想知道美国最近放生了些新闻,你可能会订阅一份美国周刊,然后一旦美国有了新的故事,美国周刊就发一刊,并邮寄给你,当你收到这份报刊,然后你就能够了解美国最新的动态。其实这就是观察者模式,A对B的变化感兴趣,就注册为B的观察者,当B发生变化时通知A,告知B发生了变化。这是一种非常典型的观察者的用法,我把这种使用方法叫做经典观察者模式。当然与之相对的还有另外一种观察者模式——广义观察者模式。

KVO

Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。每次指定的被观察的对象的属性被修改后,KVO自动通知相应的观察者。

KVO的优点:

当有属性改变,KVO会提供自动的消息通知。这样开发人员不需要自己去实现这样的方案:每次属性改变了就发送消息通知,这是KVO机制提供的最大的优点。因为这个方案已经被明确定义,获得框架级支持,可以方便地采用。
开发人员不需要添加任何代码,不需要设计自己的观察者模型,直接可以在工程里使用。
KVO的架构非常的强大,可以很容易的支持多个观察者观察同 一个属性,以及相关的值。

使用方法:

  • 注册需要观察的对象的属性addObserver:forKeyPath:options:context:
  • 实现observeValueForKeyPath:ofObject:change:context:方法,这个方法当观察的属性变化时会自动调用
  • 取消注册观察removeObserver:forKeyPath:context:

Notification

  1. 定义一个方法
    定义回调,即发生通知了我应该做啥事。

    (void)callBack{
     NSLog(@"我收到通知了!");
    }
    
  2. 对象注册,并关联信息
    注册通知,即告诉通知中心,我对啥通知感兴趣

    [[NSNotificationCenter defaultCenter] addObserver: self
    selector: @selector(callBack)
    name: @"A类通知"
    object: nil];

  3. 在要发出消息通知的地方

    (void)getNotofocation{
    NSLog(@"get it.");
    //发出通知
    [[NSNotificationCenter defaultCenter] postNotificationName:@"A类通知"       object:self];
    }
    
  4. 也可以在需要的时候取消注册通知。

posted @ 2016-04-09 14:33  iOSMonkey  阅读(544)  评论(0编辑  收藏  举报