#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的博客,谢谢!
vickate_KVO的简单使用
最新推荐文章于 2021-01-27 04:07:35 发布