IOS 中KVC的使用方法实例详解

 更新时间:2017年09月03日 10:43:27   投稿:lqh  
这篇文章主要介绍了IOS 中KVC的使用方法实例详解的相关资料,这提供具体使用方法,希望能帮助到大家,需要的朋友可以参考下

IOS 中KVC的使用方法实例详解

KVC是Key Value Coding的缩写,意思是键值编码。在iOS中,提供了一种方法通过使用属性的名称(也就是Key)来间接访问对象的属性方法。说的有的拗口,实际上就是通过类定义我们可以看到类的各种属性,那么使用属性的名称我们就能访问到类实例化后的对象的这个属性值。

      这个方法可以不通过getter/setter方法来访问对象的属性。因为一个类的成员变量如果没有提供getter/setter的话,外界就失去了对这个变量的访问渠道。而KVC则提供了一种访问的方法,这个在某些场合会很有威力。 

      不多说了,上代码:

@interface myPerson : NSObject 
{ 
  NSString *_name; 
  int   _age; 
  int   _height; 
  int   _weight; 
} 
@end 
@interface testViewController : UIViewController 
 
@property (nonatomic, retain) myPerson *testPerson; 
 
@end 
- (void)testKVC 
{ 
  testPerson = [[myPerson alloc] init]; 
   
  NSLog(@"testPerson's init height = %@", [testPerson valueForKey:@"height"]); 
  [testPerson setValue:[NSNumber numberWithInt:168] forKey:@"height"]; 
  NSLog(@"testPerson's height = %@", [testPerson valueForKey:@"height"]); 
} 

        第一段代码是定义了一个myPerson的类,这个类有一个_height的属性,但是没有提供任何getter/setter的访问方法。同时在testViewController这个类里面有一个myPerson的对象指针。 

        当myPerson实例化后,常规来说是无法访问这个对象的_height属性的,不过通过KVC我们做到了,代码就是testKVC这个函数。

        运行之后打印值就是: 

2013-11-02 11:16:21.970 test[408:c07] testPerson's init height = 0
2013-11-02 11:16:21.971 test[408:c07] testPerson's height = 168

    这就说明确实读写了_height属性。 

    KVC的常用方法:

 
- (id)valueForKey:(NSString *)key; 
- (void)setValue:(id)value forKey:(NSString *)key; 

    valueForKey的方法根据key的值读取对象的属性,setValue:forKey:是根据key的值来写对象的属性。 

    这里有几个要强调一下

1. key的值必须正确,如果拼写错误,会出现异常
2. 当key的值是没有定义的,valueForUndefinedKey:这个方法会被调用,如果你自己写了这个方法,key的值出错就会调用到这里来
3. 因为类key反复嵌套,所以有个keyPath的概念,keyPath就是用.号来把一个一个key链接起来,这样就可以根据这个路径访问下去
4. NSArray/NSSet等都支持KVC

 以上就是IOS KVC的使用方法,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • IOS多线程编程NSThread的使用方法

    IOS多线程编程NSThread的使用方法

    这篇文章主要介绍了IOS多线程编程NSThread的使用方法的相关资料,希望通过本文能帮助到大家,让大家理解使用多线程的方法,需要的朋友可以参考下
    2017-10-10
  • IOS App 无代码入侵的方法hook详细介绍

    IOS App 无代码入侵的方法hook详细介绍

    这篇文章主要介绍了IOS App 无代码入侵的方法hook详细介绍的相关资料,需要的朋友可以参考下
    2016-12-12
  • iOS实现卡片堆叠效果

    iOS实现卡片堆叠效果

    这篇文章主要为大家详细介绍了iOS实现卡片堆叠效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • IOS自带Email的两种方法实例详解

    IOS自带Email的两种方法实例详解

    这篇文章主要介绍了IOS自带Email的两种方法实例详解的相关资料,需要的朋友可以参考下
    2017-06-06
  • iOS利用NSAttributeString实现不同颜色大小显示的方法

    iOS利用NSAttributeString实现不同颜色大小显示的方法

    这篇文章主要给大家爱介绍了关于iOS利用NSAttributeString实现不同颜色大小显示的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-06-06
  • iOS自定义相机实现拍照、录制视频

    iOS自定义相机实现拍照、录制视频

    这篇文章主要为大家详细介绍了iOS自定义相机实现拍照、录制视频,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • iOS判断身份证号码是否正确的方法

    iOS判断身份证号码是否正确的方法

    本篇文章主要介绍了iOS判断身份证号码是否正确的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • iOS开发之表视图详解

    iOS开发之表视图详解

    表视图是iOS开发中最重要的视图,它以列表的形式展示数据。本篇文章详细的介绍了表视图的几种用法,有需要的小伙伴可以了解一下。
    2016-11-11
  • IOS 照片编辑的view封装的实例详解

    IOS 照片编辑的view封装的实例详解

    这篇文章主要介绍了IOS 照片编辑的view封装的实例详解的相关资料,这里提供实例帮助大家实现这样的功能,需要的朋友可以参考下
    2017-08-08
  • 浅谈WKWebView 在64位设备上的白屏问题

    浅谈WKWebView 在64位设备上的白屏问题

    下面小编就为大家带来一篇浅谈WKWebView 在64位设备上的白屏问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04

最新评论