KVC:Key-Value Coding

KVO:Key-Value Observing

Person.m

#import <Foundation/Foundation.h>

@interface Person : NSObject{
//该访问修饰符用于说明即使私有成员变量也可以通过kvc方式访问和赋值
@private
NSString *_name;
NSArray *_dogs;
}
@end @implementation Person
@end

Dog.m

#import <Foundation/Foundation.h>

@class Person;

@interface Dog : NSObject
{
@private
NSInteger _age;
Person *_owner;
}
@end @implementation Dog
@end

PersonObserve.m

#import <Foundation/Foundation.h>
#import "Person.h" @interface PersonObserve : NSObject
@end @implementation PersonObserve
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
Person *p = (Person *)object;
//使用kvc方式获取成员变量keypath的值
NSLog(@"%@",[p valueForKey:keyPath]);
}
@end

main.m

#import <Foundation/Foundation.h>
#import "Person.h"
#import "PersonObserve.h"
#import "Dog.h" int main(int argc, const char * argv[]) {
//观察者类
PersonObserve *po = [[PersonObserve alloc] init];
Person *p = [[Person alloc] init];
//使用kvo方式对成员变量“name”的属性值变化增加观察者po
//po将在该属性值发生变化时执行- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context方法
[p addObserver:po forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:nil]; //通过kvc方式设置成员变量“name”的属性值
//触发观察者执行对应方法
[p setValue:@"zhangsan" forKey:@"name"]; //kvc中forKeyPath的用法
Dog *d = [[Dog alloc] init];
[d setValue:p forKey:@"owner"];
[d setValue:@"lisi" forKeyPath:@"owner.name"]; //移除对私有成员变量“name”的观察
[p removeObserver:po forKeyPath:@"name"]; Dog *d1 = [[Dog alloc] init];
[d1 setValue:@ forKey:@"age"];
Dog *d2 = [[Dog alloc] init];
[d2 setValue:@ forKey:@"age"]; NSArray *array = [NSArray arrayWithObjects:d1,d2, nil];
[p setValue:array forKey:@"dogs"]; //kvc中valueForKeyPath数组内置表达式的用法
NSLog(@"dogs.age = %@",[p valueForKeyPath:@"dogs.age"]);
NSLog(@"dogs.age.sum = %@",[p valueForKeyPath:@"dogs.@sum.age"]);//dogs数组中age的总和
NSLog(@"dogs.age.avg = %@",[p valueForKeyPath:@"dogs.@avg.age"]);//dogs数组中age的平均值
NSLog(@"dogs.age.max = %@",[p valueForKeyPath:@"dogs.@max.age"]);//dogs数组中age的最大值
NSLog(@"dogs.age.min = %@",[p valueForKeyPath:@"dogs.@min.age"]);//dogs数组中age的最小值 return ;
}

结果:

-- ::34.611 KVC&KOC[:] zhangsan
-- ::34.612 KVC&KOC[:] lisi
-- ::34.613 KVC&KOC[:] dogs.age = (
, )
-- ::34.613 KVC&KOC[:] dogs.age.sum =
-- ::34.613 KVC&KOC[:] dogs.age.avg =
-- ::34.613 KVC&KOC[:] dogs.age.max =
-- ::34.613 KVC&KOC[:] dogs.age.min =
Program ended with exit code:

IOS开发之KVC与KVO简述的更多相关文章

  1. IOS开发之KVC KVO KVB

    KVC(Key Value Coding) KVO(Key Value Observing) KVB(Key Value Binding) KVO是Cocoa的一个重要机制,他提供了观察某一属性变化的 ...

  2. iOS开发之KVC全解

    一  KVC的基本概念 1.KVC是Key Value Coding的缩写,意思是键值编码. 在iOS中,提供了一种方法通过使用属性的名称(也就是Key)来间接访问对象属性的方法,这个方法可以不通过g ...

  3. iOS开发之KVC

    1.KVC概述 KVC(Key-value coding)是一套利用字符串标识符间接访问对象属性和关系的机制.Cocoa Programming中,Core Data,Application Scri ...

  4. iOS 开发之 KVC - setValuesForKeysWithDictionary 解析

    从字典映射到一个对象,这是KVC中的一个方法所提供的,这个方法就是 setValuesForKeysWithDictionary:,非常好用,不需要你来一一的给对象赋值而直接从字典初始化即可,但用的不 ...

  5. iOS中关于KVC与KVO知识点

    iOS中关于KVC与KVO知识点 iOS中关于KVC与KVO知识点  一.简介 KVC/KVO是观察者模式的一种实现,在Cocoa中是以被万物之源NSObject类实现的NSKeyValueCodin ...

  6. 李洪强iOS开发之iOS社区收集

    李洪强iOS开发之iOS社区收集 项目 简述 github 全球最大的代码仓库,无论是iOS开发还是Android开发没有人不知道这个网站,它也是一个社区,你可以去follow(关注)某些人或公司. ...

  7. 李洪强iOS开发之iOS工具收集

    李洪强iOS开发之iOS工具收集 项目 简述 日期 我是怎么慢慢变懒的 : Jenkins + 蒲公英 使用Jenkins + 蒲公英使得项目打包给测试人员自动化,大大节省了劳动力 2015.04.1 ...

  8. 李洪强iOS开发之iOS学习方法收集

    李洪强iOS开发之iOS学习方法收集 在这里收集一些iOS学习方法,会不断更新 项目 简述 日期 一年多iOS开发总结 作者总结了自己一年多的iOS学习经验,对于iOS初学者来说很多地方是可以借鉴的 ...

  9. 李洪强iOS开发之iOS好文章收集

    李洪强iOS开发之iOS好文章收集 该文收集朋友们转发或自己的写的技术文章,如果你也有相关的好文章,欢迎留言,当好文章多的时候,我会对这些好文章进行分门别类 文章 简述 日期 直播服务配置 使用 ng ...

随机推荐

  1. nyoj 96 一个水题目

    虽然很简单,发现自己用内存太高了了,算了,我就是这水平了. 描述 已知w是一个大于10但不大于1000000的无符号整数,若w是n(n≥2)位的整数,则求出w的后n-1位的数. 输入 第一行为M,表示 ...

  2. HW4.38

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...

  3. Call Hierarchy(方法调用层次)

    在VS2010中的一项新功能:Call Hierarchy窗口,它可以审查代码,确定方法在哪里调用,以及它们与其他方法的关系. 打开一个类文件,找有方法体实现代码的方法,右键选择View Call H ...

  4. ios:Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' - perhaps the designated entry point is not set?

    - (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)laun ...

  5. jq问题处理

    1.同一个事件,点击显示和隐藏 $(document).ready(function(){ $('.container .nav-header').click(function(){ var chan ...

  6. Android实时监听网络状态(2)

    在开发android应用时,涉及到要进行网络访问,时常需要进行网络状态的检查,以提供给用户必要的提醒.一般可以通过ConnectivityManager来完成该工作. ConnectivityMana ...

  7. ThinkPHP函数详解:D方法

    从本篇开始,我们会陆续给大家详细说明下框架内置函数的用法. D方法 D方法应该是用的比较多的方法了,用于实例化自定义模型类,是ThinkPHP框架对Model类实例化的一种封装,并实现了单例模式,支持 ...

  8. 进程环境之main函数

    C程序总是从main函数开始执行.main函数的原型是: int main( int argc, char *argv[] ); 其中,argc是命令行参数的数目,argv是指向参数的各个指针所构成的 ...

  9. iOS VoiceOver Programming Guide

    VoiceOver是苹果“读屏”技术的名称,属于辅助功能的一部分.VoiceOver可以读出屏幕上的信息,以帮助盲人进行人机交互. 这项技术在苹果的各个系统中都可以看到,OS X,iOS,watchO ...

  10. Linux Ubuntu上架设FTP

    操作系统:ubuntu (GNU/Linux) 为了在机子上架设ftp服务器,我们需要安装ftp服务器软件.Linux下具有代表性的ftp服务器软件有Wu-FTP,ProFTP和Vsftp.Wu-FT ...