美文网首页
OC -> 观察者模式实现原理

OC -> 观察者模式实现原理

作者: Mr_Kong | 来源:发表于2016-06-14 13:31 被阅读630次

    观察者模式实现原理

    简介

    观察者模式:观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当这个主题对象在状态发生变化时,会通知所有观察者对象,使得他们能够更新自己。

    实现

    观察者模式最常见的就是 KVO和 NSNotification

    KVO
    //这样点击 Button 的时候根据 keyPath 来更改 value 的值,然后实现 observer 的代理方法。

    [self.buttonFor2FA addObserver:self forKeyPath:@"kvoNotification" options:NSKeyValueObservingOptionNew context:nil];```
    

    [self.buttonFor2FA setValue:@"ddd" forKey:@"kvoNotification"];

    • (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context
      {
      if ([keyPath isEqualToString:@"kvoNotification"]) {
      //执行操作;
      }
      }
    
    NSNotification
    

    NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];

    [defaultCenter addObserver:self selector:@selector(defaultNotification:) name:@"testNotification" object:nil];

    [defaultCenter postNotificationName:@"testlktej" object:nil];

    ###原理
    
     *  第一步
     *  调用一个单例方法,单例方法中要注意的是防止第一次调用没有结束,第二次调用就又开始了。
     *  这里我们一般用 GCD 或者用 @synchronized{}增加一个线程访问等待。
     *  这里面的话那, 这里创建单例的时候会用一个 NSMutableArray 来保存一个数组。为了防止存在多种单例进行保存。
    
     *  第二步
     *  创建 add 的过程就是创建一个数据模型将 observer,selector,name,object的信息保存到数组里面。
     */
     *  第三步
     *  post 通知的时候就是将数据中的数据进行遍历然后找到 name 对应的 observer 和 selector 进行方法的实现。
    

    相关文章

      网友评论

          本文标题:OC -> 观察者模式实现原理

          本文链接:https://www.haomeiwen.com/subject/mikudttx.html