iOS学习笔记(6)键值编码——KVC_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > iOS学习笔记(6)键值编码——KVC

iOS学习笔记(6)键值编码——KVC

 2014/7/21 15:42:19  傲云jack  程序员俱乐部  我要评论(0)
  • 摘要:在KVC编程方式中,无论调用setValue:forKey:方法,还是调用valueForKey:方法,都是通过NSString对象来指定被操作属性,其中forKey:标签用户传入属性名的。对于setValue:属性值forKey@“name”;代码,底层的执行机制如下。(1)程序优先考虑调用“setName:属性值;”代码通过setter方法完成设置。(2)如果该类没有setName:方法,KVC机制会搜索该类名为_name的成员变量
  • 标签:笔记 学习 iOS 学习笔记 编码

  在KVC编程方式中,无论调用setValue:forKey:方法,还是调用valueForKey:方法,都是通过NSString对象来指定被操作属性,其中forKey:标签用户传入属性名的。

  对于setValue:属性值forKey@“name”;代码,底层的执行机制如下。

  (1)程序优先考虑调用“setName:属性值;”代码通过setter方法完成设置。

  (2)如果该类没有setName:方法,KVC机制会搜索该类名为_name的成员变量,无论该成员变量是在类接口部分定义,还是在类实现部分定义,也无论用哪个访问控制符修饰,这条KVC代码顶层实际上就是对_name成员变量赋值。

  (3)如果该类既没有setName:方法,也没有定义_name成员变量,KVC机制会搜索该类名为name的成员变量,无论该成员变量是在类接口部分定义,还是在类实现部分定义,也无论用哪个访问控制符修饰,这条KVC代码顶层实际上就是对name成员变量赋值。

  (4)如果上面3条都没有找到,系统将会执行该对象的setValue:forUndefinedKey:方法。

 

  对于valueForKey:@name;代码,底层的执行机制如下。

  (1)程序优先考虑调用“name;”代码来获取该getter方法的返回值。

  (2)如果该类没有name方法,KVC机制会搜索该类名为_name的成员变量,无论该成员变量是在类接口部分定义,还是在类实现部分定义,也无论用哪个访问控制符修饰,这条KVC代码顶层实际上就是返回_name成员变量的值。

  (3)如果该类既没有name方法,也没有定义_name成员变量,KVC机制会搜索该类名为name的成员变量,无论该成员变量是在类接口部分定义,还是在类实现部分定义,也无论用哪个访问控制符修饰,这条KVC代码顶层实际上就是返回name成员变量的值。

  (4)如果上面3条都没有找到,系统将会执行该对象的valueForUndefinedKey:方法。

  提示:

  (1)默认的setValue:forUndefinedKey:方法和valueForUndefinedKey:方法实现就是引发一个异常,这个异常将会导致程序因为异常结束。如果不想因为不存在key而结束程序,可以重写这两个方法。

  (2)当程序尝试为某个属性设置nil值时,如果该属性并不接受nil值,那么程序将会自动执行该对象的setNilValueForKey:方法。如果为了自行制定这个行为,可以通过重写setNilValueForKey:方法实现。

发表评论
用户名: 匿名