vickate_KVO的简单使用

#import "RootViewController.h"
#import "SiCong.h"
#define kColor arc4random() % 256 / 255.0
@interface RootViewController ()

// 声明属性, 方便修改
@property (nonatomic, retain) SiCong *yongFei;
@end

@implementation RootViewController

/**
 *  KVO
    1.KVO 是通过观察对象中的某个属性的变化 从而触发某个方法
    2.控制器 作为观察者 观察数据模型的变化 从而修改视图的变化
 */



/**
*  观察model中的属性 发生变化后 让图片显示到cell上

    思路:1.先明确 观察者 和 被观察者(和cell对应model中的一个属性 并且是一个 可以改变的 图片从无到有)
        2.如何让   图片从无到有?
        肯定是网络请求, 用已经封装好的类 ImageDownLoader 去请求
        3.我们可以给model写一个方法 去请求图片 (方法中是用imageDownLoad对象)
        4.这个model请求图片的方法如何写?  可以让图片加载出来
        5.从无到有后 触发观察者方法
        6.方法中, 把model图片放到对应的cell中
        7.移除观察者
*/


- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.navigationItem.title = @"KVO";
    
    // 构建一个思聪
    self.yongFei = [[SiCong alloc] init];
    _yongFei.hobby = @"年少多金";
    
    // 观察思聪的 兴趣 属性
    // addObserver  添加一个观察者   观察者 self代表控制器(C)
    // forKeyPath 被观察者的 某个属性  被观察者 hobby 代表model(M)的属性
    // options 观察的变化(新的, 老的)   添加两个枚举值  中间加一个 |
    //  context 可以是携带的参数,也可以是空的nil
    [_yongFei addObserver:self forKeyPath:@"hobby" options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) context:@"哈哈"];
    
    UIButton *button = [UIButton buttonWithType:(UIButtonTypeRoundedRect)];
    button.frame = CGRectMake(100, 100, 175, 50);
    [button setTitle:@"改变兴趣属性" forState:(UIControlStateNormal)];
    button.backgroundColor = [UIColor colorWithRed:1.000 green:0.880 blue:0.500 alpha:1.000];
    [button addTarget:self action:@selector(actionButton:) forControlEvents:(UIControlEventTouchUpInside)];
    [self.view addSubview:button];
    [button release];
    
}

- (void)actionButton:(UIButton *)button
{

//    self.view.backgroundColor = [UIColor colorWithRed:arc4random() % 255 / 255.0 green:arc4random() % 256/ 255.0 blue:arc4random() %256 / 255.0 alpha:1];
    self.yongFei.hobby = @"快进思聪红包群";
}

// 如果 观察的某个属性 发生了变化 就触发该方法
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    //  keyPath 被观察的属性
    NSLog(@"keyPath = %@", keyPath);
    // 被观察属性的对象
    NSLog(@"object = %@", object);
    // 更改的新值 和 旧值 组成的字典
    NSLog(@"change = %@", change);
    // 空
    NSLog(@"context = %@", context);
    // 更改背景颜色
    self.view.backgroundColor = [UIColor colorWithRed:kColor green:kColor blue:kColor alpha:1];
    // 取消观察者   一定要记得取消观察者,可能会导致程序出错
//    [object removeObserver:self forKeyPath:@"hobby"];
}
欢迎光顾iOS_Bay的博客,谢谢! 大笑 大笑
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值