iOS观察者模式

Model.h文件
#import <Foundation/Foundation.h>
@interface Model : NSObject
@property (nonatomic, copy)NSString * name;
@end
ViewController.m文件
#import "ViewController.h"
#import "Model.h"
@interface ViewController ()
//声明一个Model属性
@property (nonatomic, strong)Model * model;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//实例化Model并给其属性赋值
self.model = [[Model alloc] init];
self.model.name = @"000";
//给model的name属性添加观察者
//_model:被监听的对象 @“name” :被监听的对象的属性
//self : 要进行监听的对象,可为任意对象,但此对象必须实现监听方法
//options :监听该属性的新值和旧值
//context :传递的信息
[_model addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:@"我的值变了"];
}
//触摸屏幕改变model的name属性的值
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
self.model.name = @"123";
}
//当监听的属性值发生变化时就会出发这个方法
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{

    if ([keyPath isEqualToString:@"name"]) {
        NSLog(@"%@", [object class]);    //被监听的对象
        NSLog(@"%@",change);                //字典存储监听的值(新值,旧值)
        NSLog(@"%@", context);            //传递过来的信息
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问题:开个一个需要登录才能操作,每个界面都需要确认是否登录,并且在切换账号后更新界面 定义一个基类,用来检测当前是...
    zyw1995阅读 1,626评论 1 0
  • 什么是观察者模式?当A对B的变化感兴趣,需要监听B的状态变化,就注册为B的观察者,当B发生变化时通知A,告知B发生...
    _Lily阅读 1,612评论 2 4
  • 观察者模式用户在订阅中心注册订阅号,通知中心往订阅号发消息,用户接收消息,执行通知中心协议方法。系统通知中心使用后...
    印林泉阅读 286评论 0 0
  • 一.什么是观察者模式? 简单的说就是一个对象拥有多个特征,当某一个特征发生变化时,另外一个对象做出相应的处理和操作...
    LYSNote阅读 4,231评论 0 5
  • 观察者模式本质上时一种发布-订阅模型,用以消除具有不同行为的对象之间的耦合,通过这一模式,不同对象可以协同工作,同...
    PlatonsDream阅读 1,317评论 0 0