Person.h
#import<Foundation/Foundation.h> @classAccount; @interfacePerson :NSObject{
@private
int_age;
}
#pragma mark -属性 @property(nonatomic,copy)NSString*name;
@property(nonatomic,retain)Account*account; -(void)showMessage; @end Person.m
#import"Person.h"
#import"Account.h" @implementationPerson -(void)showMessage{
NSLog(@"name=%@,age=%d",_name,_age);
} #pragma mark设置人员账户
-(void)setAccount:(Account*)account{
_account=account;
//添加对Account的监听
[_accountaddObserver:selfforKeyPath:@"balance"options:NSKeyValueObservingOptionNewcontext:nil];
} #pragma mark重写observeValueForKeyPath方法,当账户余额变化后此处获得通知
-(void)observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary*)change context:(void*)context{
if([keyPathisEqualToString:@"balance"]){//这里只处理balance属性
NSLog(@"keyPath=%@,object=%@,newValue=%.2f,context=%@",keyPath,object,[[changeobjectForKey:@"new"]floatValue],context);
}
} #pragma mark重写销毁方法
-(void)dealloc{
[self.accountremoveObserver:selfforKeyPath:@"balance"];//移除监听
} Account.h
#import<Foundation/Foundation.h> @interfaceAccount :NSObject
#pragma mark余额
@property(nonatomic,assign)floatbalance;
@end Account.m
#import"Account.h" @implementationAccount @end Main调用方法
- (void)viewDidLoad {
[superviewDidLoad]; #if0
Person *person1=[[Person alloc]init];
[person1 setValue:@"Kenshin"forKey:@"name"];
[person1 setValue:@28forKey:@"age"];//注意即使一个私有变量仍然可以访问 [person1 showMessage];
//结果:name=Kenshin,age=28
NSLog(@"person1's name is :%@,age is :%@",person1.name,[person1 valueForKey:@"age"]);
//结果:person1's name is :Kenshin,age is :28 Account *account1=[[Account alloc]init];
person1.account=account1;//注意这一步一定要先给account属性赋值,否则下面按路径赋值无法成功,因为account为nil,当然这一步骤也可以写成:[person1 setValue:account1 forKeyPath:@"account"]; [person1 setValue:@.0forKeyPath:@"account.balance"]; NSLog(@"person1's balance is :%.2f",[[person1 valueForKeyPath:@"account.balance"] floatValue]);
//结果:person1's balance is :100000000.00 #else Person*person1=[[Personalloc]init];
person1.name=@"Kenshin"; Account*account1=[[Accountalloc]init];
account1.balance=100000000.0;
person1.account=account1; account1.balance=200000000.0;//注意执行到这一步会触发监听器回调函数observeValueForKeyPath: ofObject: change: context:
#endif }

KVC/KVO简单实例代码的更多相关文章

  1. iOS开发笔试面试- KVC/KVO简单使用

    转自:http://my.oschina.net/caijunrong/blog/510701 一.对于KVC模式(Key Value Coding): 1.其实在实际开发中用得比较多得就是:接收到j ...

  2. html5+go+websocket简单实例代码

    这次的就直接发放代码截图吧,应该是用go语言做后台一个简易的聊天,这里没用到什么特别的知识,最朴实的来实现效果,主要目的是分享下h5怎么用websocket,go搭建websocket服务的主要部分. ...

  3. .net自定义事件,经典简单实例代码

    1,新建一个控制台应用程序TestDelegate,本项目主要实现:热水器加热,报警器监控,当热水温度达到80度的时候报警器报警这样一个简单的事件处理程序 2,定义委托处理程序 public dele ...

  4. vue简单实例代码

    <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...

  5. mysqli数据库操作简单实例

    mysqli数据库操作简单实例 代码 结果

  6. TERSUS无代码开发(笔记09)-简单实例前端样式设计

    前端常用样式设计 =========================================================================================== ...

  7. TERSUS无代码开发(笔记08)-简单实例电脑端后台逻辑开发

    主管审批功能逻辑开发 1.查询逻辑开发(查询待审批记录) 2.批准处理(将选中的一条记录进行批准处理)  =============================================== ...

  8. TERSUS无代码开发(笔记07)-简单实例手机端后台逻辑开发

    提交申请逻辑开发 1.添加父级对象引用(从父级对象中获取前端输入框的值) 1.设计数据库表(表名和字段名称不能用中文) 2.设计置数据库主键(可设联合主键) 3.传值形成数据实列处理 4.服务器端处理 ...

  9. TERSUS无代码开发(笔记06)-简单实例手机端页面设计

    手机端的设计 1.页面说明 2.默认页面===>提交请假单(上面页面双击进入,页面主要编辑区) 2.1默认页面===>提交请假单===>头部区(页面部份主要编辑区01) 2.1.1默 ...

随机推荐

  1. 动态调用webservice及WCF服务

    动态调用web服务,该方法只针对Web service, WCF的服务不行,如果是WCF的就通过工具直接生产代理类,把代理类配置到调用的项目中,通过配置客户端的终结点动态的取实现: 通过Svcutil ...

  2. poj 1236 Network of Schools(连通图)

    题目链接:http://poj.org/problem?id=1236 题目大意:有一些学校,学校之间可以进行收发邮件,给出学校的相互关系,问:1.至少 要向这些学校发送多少份才能使所有的学校都能获得 ...

  3. Android开发学习---template requires a minimum SDK version of at least 7,build target API version of 14

    adt 22.6.3的bug 当adt更新到22.6.3,其编辑器中最低支持api7,即android 2.1,这里可能是google故意这么做的,也可能是其bug.其target sdk 和comp ...

  4. Dapper关联查询

    1.一对一: using (IDbConnection connecton = new MySqlConnection(ConfigurationManager.ConnectionStrings[& ...

  5. 使用angularJS遇见的一些问题的解决方案

    1. angularJS的$http.post请求,SpringMVC后台接收不到参数值的解决方案 问题一般为:400 Required String parameter 'rPassword' is ...

  6. Sql日期时间格式转换

    sql server2000中使用convert来取得datetime数据类型样式(全) 日期数据格式的处理,两个示例: CONVERT(varchar(16), 时间一, 20) 结果:2007-0 ...

  7. oracle 11gr2 官方文档下载

    http://www.oracle.com/technetwork/database/enterprise-edition/documentation/index.html

  8. mysql text字段判断是否为空

    mysql text字段判断是否为空 mysql text字段为空select * from `tableName` where `textField` is null or `textField` ...

  9. 用C语言关于学生管理系统的几种实现方法(一位数组,二维数组,指针,结构体)

    一位数组: #include <stdio.h> #include<string.h> #define N 5 void luru(float s[],int n); void ...

  10. Ubuntu系统网卡IP配置方法

    主要文件为:/etc/network/interfaces 在没有任何配置的情况下,其内容为以下两行: auto loiface lo inet loopback 配置网口为动态获取IP的,在末尾加上 ...