OC_10_KVC
2016-08-15 18:18
197 查看
这一次咱们来讲讲KVC(Key-Value Coding)和KVO(Key-Value Observing),即键值编码和键值观察。
首先咱来建立一个工程:
点iOS(Application)—选择Single View Application —next
输入Product Name (先讲讲KVC)跟创建OC一样的后面
创建好后,大概是这样:
我们再创建两个类,一个Book类,一个Student类:
(command+N)
点iOS(Source)—选择Cocoa Touch Class——next———后面步骤不讲啦,一样的
KVC(键值编码 Key-Value Coding)
KVC提供了一种在运行时而非编译时动态访问对象属性与实例变量的方式。
咱来举个栗子:
我们先到Student.h文件输入以下代码:
去到Student.m中实现一下:
再去到Book.h文件中,咱们定义一个书名:
Book.m暂且不管。咱去到 ViewController.m,首先导入头文件Student和Book,接着参考以下代码:
对了,咱们还要选个手机先:
点上方的Product—>Destination—>:
这个根据自己需要选择一个吧!~我选了iphone6
然后,咱们来运行一下,运行结果如下:
首先咱来建立一个工程:
点iOS(Application)—选择Single View Application —next
输入Product Name (先讲讲KVC)跟创建OC一样的后面
创建好后,大概是这样:
我们再创建两个类,一个Book类,一个Student类:
(command+N)
点iOS(Source)—选择Cocoa Touch Class——next———后面步骤不讲啦,一样的
KVC(键值编码 Key-Value Coding)
KVC提供了一种在运行时而非编译时动态访问对象属性与实例变量的方式。
咱来举个栗子:
我们先到Student.h文件输入以下代码:
#import "Book.h"//导入Book头文件(后面解释) @interface Student : NSObject { @public NSString *_name; //学生姓名 NSUInteger _age; //学生年龄 Book *_book; //把书作为学生的属性 } @property (nonatomic,strong)NSString *address; //学生地址 //定义一个p1 @property (assign ,nonatomic)int p1; //定义一个p2 @property (assign ,nonatomic)int p2; //定义一个p3 @property (assign ,nonatomic)int p3; //给Book一个名字 @property (assign ,nonatomic)Book *bookName; //方法,KVC的应用 -(int)getValuePropertyName:(NSString *)name; //方法,KVC的应用 -(int)getNewValuePropertyName:(NSString *)name;
去到Student.m中实现一下:
-(NSString *)description{ //描述 return [NSString stringWithFormat:@"My name is %@,%lu years old,living in %@",_name,_age,_address]; } //下面这个就是为了实现根据传入的字符串进行判断,从而返回相应的值 -(int)getValuePropertyName:(NSString *)name{ if ([name isEqualToString:@"p1"] ) { return _p1; } else if([name isEqualToString:@"p2"]) { return _p2; } else if([name isEqualToString:@"p3"]){ return _p3; } return 0; } -(int)getNewValuePropertyName:(NSString *)name{ NSNumber *pNumber = [self valueForKey:name]; //取值 return [pNumber intValue]; //拆包 }
再去到Book.h文件中,咱们定义一个书名:
{ NSString *_bookName; }
Book.m暂且不管。咱去到 ViewController.m,首先导入头文件Student和Book,接着参考以下代码:
Student *stu1 = [Student new]; //创建一个stu1的对象 //setValue...forKey 就是以字符串形式向对象发送消息,可以设置对象实例变量的值 [stu1 setValue:@"Jason" forKey:@"_name"]; [stu1 setValue:@18 forKey:@"_age"]; [stu1 setValue:@"CZ" forKey:@"_address"]; NSLog(@"%@",stu1); //访问 //valueForKey 就是以字符串形式向对象发送消息,用于获取对象中实例变量的值 NSString *name = [stu1 valueForKey:@"_name"]; NSNumber *age = [stu1 valueForKey:@"_age"]; NSString *address = [stu1 valueForKey:@"_address"]; NSLog(@"name = %@,age = %@,address = %@",name,age,address); //动态访问某些属性时,使用一些可以运行时而不是编译时改变的值 stu1.p1 = 1; stu1.p2 = 2; stu1.p3 = 3; //以下两个进行对比,NewValue显然可以省略上面Student.m中的if的判断,直接取值拆包即可。 int a = [stu1 getValuePropertyName:@"p1"]; NSLog(@"%d",a); int b = [stu1 getNewValuePropertyName:@"p1"]; NSLog(@"%d",b); Book *book =[Book new]; //创建Book对象 // [b1 setValue:<#(id)#> forKey:<#(NSString *)#>] //键路径编码 //setValue...forKeyPath和valueForKeyPath 就是来访问键路径 [stu1 setValue:book forKeyPath:@"_book"];//取书的名字 [stu1 setValue:@"老人与海" forKeyPath:@"_book._bookName"]; NSString *bookName = [stu1 valueForKeyPath:@"_book._bookName"]; NSLog(@"bookName = %@",bookName); }
对了,咱们还要选个手机先:
点上方的Product—>Destination—>:
这个根据自己需要选择一个吧!~我选了iphone6
然后,咱们来运行一下,运行结果如下:
相关文章推荐
- 黑马程序员_OC基础10_内存管理(多对象)
- OC教程10-NSNumber具体
- OC学习篇之---KVC和KVO操作
- OC学习:KVC中的运算符
- OC学习篇之-----KVC
- 黑马程序员---学习笔记23:OC基础(10)内存管理
- OC-KVC/KVO
- OC有符号16进制整形转10进制整形
- 第03天OC语言(10):super关键字
- OC中的KVC和KVO(二)
- oc-10-对象做参数
- OC-KVC
- OC --- KVC
- OC学习之KVC
- KVC 和 OC字典
- OC循环渐进:KVC基本用法
- OC语言10-构造方法
- iOS 10 和Xcode8 一起 创建 Siri 功能步骤详解(OC写的 )
- 第01天OC语言(10):第一个OC类方法2
- 10、UISlider-OC+UI