首页 > 代码库 > KVC && KVO 初见
KVC && KVO 初见
Look,这是一个很简单的要求,点击Add me,age +1.
想一想的话很简单的,设置一个属性Nsinteger age,点击button add me,直接加1在重新显示Lable就好啦,不过,我们今天是来练习KVC和KVO的,苹果的键值编程哈哈
首先我们定义一个Human的类,并且完成了它的初始化方法
#import <Foundation/Foundation.h>@interface human : NSObject@property (nonatomic,assign) NSString *name;@property (nonatomic,assign) NSInteger age;-(id)initHuman:(NSString *)Initname hisage:(NSInteger) Initage;@end
#import "human.h"@implementation human-(id)initHuman:(NSString *)Initname hisage:(NSInteger)Initage{ if(self=[super init]){ _name=Initname; _age=Initage; } return self;}@end
很普通很简单。。。
下面在ViewControler中调用该类,完成对这个人的年龄的增加
#import <UIKit/UIKit.h>#import "human.h"@interface ViewController : UIViewController<UIWebViewDelegate>{ human *keith;}@property (weak, nonatomic) IBOutlet UILabel *Infoshow;- (IBAction)Addme:(id)sender;@end
#import "ViewController.h"@interface ViewController ()@end@implementation ViewController-(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; keith=[[human alloc]initHuman:@"keith" hisage:26]; self.Infoshow.text=[NSString stringWithFormat:@"name is %@,age is %ld",keith.name,keith.age]; [keith addObserver:self forKeyPath:@"age" options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew context:nil];//}- (IBAction)Addme:(id)sender { keith.age+=1; }-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ if ([keyPath isEqualToString:@"age"] && object==keith) { self.Infoshow.text=[NSString stringWithFormat:@"name is %@,age is %ld",keith.name,keith.age];//添加对keith keyPath的监视 }}-(void)dealloc{ [keith removeObserver:self forKeyPath:@"age"];//不用的时候移除注册}@end
可以看出如果通过这样的模式有个好处是能减少模型和视图的耦合关键,模型只管运算,视图的变化通过KVO监视键值的变化,自动更新。
KVC && KVO 初见
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。