Objective-C之KVC、KVO】的更多相关文章

一.简介 1.KVC简介 2.KVO简介 二.KVC相关技术 1.Key和Key Path 2.点语法和KVC 3.一对多关系(To-Many)中的集合访问器方法 4.键值验证(Key-Value Validation) 5.KVC对数值和结构体型属性的支持 6.集合运算符(Collection Operators) 三.实现原理 1.KVC如何访问属性值 2.KVC/KVO实现原理 四.优点和缺点 1.优点 2.缺点 前言: 1.本文基本不讲KVC/KVO的用法,只结合网上的资料说说对这种技术…
原文地址:http://blog.csdn.net/wzzvictory/article/details/9674431 前言: 1.本文基本不讲KVC/KVO的用法,只结合网上的资料说说对这种技术的理解. 2.由于KVO内容较少,而且是以KVC为基础实现的,本文将着重介绍KVC部分. 一.简介 KVC/KVO是观察者模式的一种实现,在Cocoa中是以被万物之源NSObject类实现的NSKeyValueCoding/NSKeyValueObserving非正式协议的形式被定义为基础框架的一部分…
kvc/kvo复习 1 小问题 '[<XMGPerson 0x7fb8a8f30220> setValue:forUndefinedKey:]: this XMGPerson * person = [[XMGPerson alloc] init]; XMGCat *cat = [[XMGCat alloc] init]; person.cat = cat; [person setValue:@"bob" forKey:@"name"]; [person…
  作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/9674431 转载请注明出处 如果觉得文章对你有所帮助,请通过留言或关注微信公众帐号wangzzstrive来支持我,谢谢!   前言: 1.本文基本不讲KVC/KVO的用法,只结合网上的资料说说对这种技术的理解. 2.由于KVO内容较少,而且是以KVC为基础实现的,本文将着重介绍KVC部分. 一.简介 KVC/KVO是观察者模式的一种实现,在Cocoa中是以被万物…
知识点复习   1. 触摸事件&手势识别   1> 4个触摸事件,针对视图的 2> 6个手势识别(除了用代码添加,也可以用Storyboard添加)   附加在某一个特定视图上的,其中需要注意轻扫手势通常会附加到根视图上.   * 大部分操作,都会在touchesBegan事件中处理,以防夜长梦多! * touchesEnd事件通常用于处理touchesMoved事件中的收尾工作!   以上两项内容都必须要掌握   3> 响应者链条,目的是为了让大家能够理解手势触摸事件的传递过程…
KVC(Key Value Coding) KVO(Key Value Observing) KVB(Key Value Binding) KVO是Cocoa的一个重要机制,他提供了观察某一属性变化的方法,极大的简化了代码.这种观察-被观察模型适用于这样的情况,比方说根据A(数 据类)的某个属性值变化,B(view类)中的某个属性做出相应变化.对于推崇MVC的cocoa而言,kvo应用的地方非常广泛.(这样的机制听起来类 似Notification,但是notification是需要一个发送no…
一. Objective-C 方法详解 1. 方法属性 (1) OC 方法传参机制 Object-C 方法传参机制 : OC 中得参数传递都是值传递, 传入参数的是参数的副本; -- 基本类型 (值传递) : int 等基本类型直接传入 这些基本类型的的副本; -- 指针类型 (地址传递) : 使用指针变量作为参数, 传递的也是指针变量的副本, 但是这个副本本身的值是一个地址, 地址 变量 和 地址 变量的副本 还是指向同一个地址; (2) OC 方法 与 传统函数 方法 与 传统函数 : --…
KVC和KVO看上去又是两个挺牛的单词简写,KVC是Key-Value Coding的简写,是键值编码的意思.KVO是Key-Value  Observing的简写,是键值观察的意思.那么我们能拿KVC和KVO干些什么事呢?这两个缩写单词不能否认听起来挺高端的样子.这两个方法都是runtime方法,我们先来介绍KVC. 1.KVC(Key-Value Coding)键值编码 为了测试我们建立两个测试类 测试类一: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17…
KVC 什么是KVC --->What KVC指的就是NSKeyValueCoding非正式协议. KVC是一种间接地访问对象的属性的机制. 这种间接表现在通过字符串来标识属性,而不是通过调用存取方法或直接地访问实例变量的方式. KVC机制不仅支持对象,还支持标量和结构体类型,这些非对象的类型会被自动的装箱和开箱. Key & Key Path 键(Key)是一个字符串用来标识对象里面的一个指定的属性.一般一个键对应对象的存取方法或实例变量.键必须是ASCII码,一般以小写字母开始,不能包含…
一. iOS 中KVC.KVO.NSNotification.delegate 在实际的编程中运用的非常多,掌握好他们的运行原理和使用场合对于我们程序的开发将会带来事办工倍的效果:   二. KVC  key-Value coding,键值编码,级通过制定的key我们能查找到对应的value,也能给对应的key附上value值.这一点类似于我们的字典查找.比如我们需要查找哪一页的内容,只需要将字典的唯一的页码(也就是key)找到,就能够知道这一页的内容,根据这个字典这一特性,程序猿们发明了Dic…
KVC和KVO都属于键值编程而且底层实现机制都是isa-swizzing,所以本来想放在一起讲的.但是篇幅有限所以就分成了两篇博文 KVO实现机制传送门 KVC概述 KVC是Key Value Coding的简称.它是一种可以通过字符串的名字(key)来访问类属性的机制.而不是通过调用Setter.Getter方法访问. 关键方法定义在 NSKeyValueCodingProtocol KVC支持类对象和内建基本数据类型. KVC使用 获取值 valueForKey: 传入NSString属性的…
KVC和KVO都属于键值编程而且底层实现机制都是isa-swizzing,所以本来想放在一起讲的.但是篇幅有限所以就分成了两篇博文. KVC实现机制传送门 KVO概述 键值观察Key-Value-Observer就是观察者模式. 观察者模式的定义:一个目标对象管理所有依赖于它的观察者对象,并在它自身的状态改变时主动通知观察者对象.这个主动通知通常是通过调用各观察者对象所提供的接口方法来实现的.观察者模式较完美地将目标对象与观察者对象解耦. 当需要检测其他类的属性值变化,但又不想被观察的类知道,有…
概述 由于ObjC主要基于Smalltalk进行设计,因此它有很多类似于Ruby.Python的动态特性,例如动态类型.动态加载.动态绑定等.今天我们着重介绍ObjC中的键值编码(KVC).键值监听(KVO)特性: 键值编码KVC 键值监听KVO 键值编码KVC 我们知道在C#中可以通过反射读写一个对象的属性,有时候这种方式特别方便,因为你可以利用字符串的方式去动态控制一个对象.其实由于ObjC的语言特性,你根部不必进行任何操作就可以进行属性的动态读写,这种方式就是Key Value Codin…
一.KVC Key-Value-Coding 键值编码(KVC:是一种存取值的方式,通过key存value 或者通过key获取value key从哪里来的呢? key 把对象里面的属性名.变量名当作了一个key(把属性名看成了一个普通的字符串来使用) 以字符串的形式向对象发送消息,字符串是存取值的关键字: 例子: 在person类中声明了一个name属性,并初始化一个对象sushi. 存值:,,,,,,,setValue:,,,,,,,forKey:,,,,,,,, [sushi setValu…
来源:http://www.cnblogs.com/jay-dong/archive/2012/12/13/2815778.html 熟悉oc语法的同学也许都会懂得这么一点:在oc中,类的成员变量或是方法是没有绝对私有的. 私有方法直接通过类实例无法访问,但可以借助oc的“编译运行时”机制,也即“瞎子摸黑”机制(个人理解:只要确定了该类有方法A,管你是私有共 有,我用performSelector函数就能调用你),说到这,也许有同学会自然想起,那私有变量如何去访问呢?貌似以前还真没这样搞过,然而…
KVC,即是指 NSKeyValueCoding,一个非正式的 Protocol,提供一种机制来间接访问对象的属性.KVO 就是基于 KVC 实现的关键技术之一. 一个对象拥有某些属性.比如说,一个 Person 对象有一个 name 和一个 age 属性.以 KVC 说法,Person 对象分别有一个 value 对应他的 name 和 address 的 key. key 只是一个字符串,它对应的值可以是任意类型的对象.从最基础的层次上看,KVC 有两个方法:一个是设置 key 的值,另一个…
看了那么多博客.描述那么复杂,其实KVC很简单,没描述的那么复杂,所以写一篇简单的易于理解的博文,切入正文: 1.KVC底层是通过runtime对method和value操作  比如说如下的一行KVC的代码: [sit setValue:@"sitename" forKey:@"name"]; 就会被编译器处理成: SEL sel = sel_get_uid ("setValue:forKey:"); IMP method = objc_msg_…
KVC(键值编码) 动态设置: setValue:属性值 forKey:属性名(用于简单路径) setValue:属性值 forKeyPath:属(用于复合路径,例如Person有一个Account类型的属性,那么person.account就是一个复合属性) 动态读取: valueForKey:属性名 valueForKeyPath:属性名(用于复合路径) KVO(键值监听) 常规使用 1.注册指定key路径的监听器 - (void)addObserver:(NSObject *)anObse…
iPhone程序开发 KVO/KVC实现机理分析是本文要介绍的内容,不多说,直接进入话题.我们来看详细内容. Objective-C里面的Key-Value Observing (KVO)机制,非常不错,可以很好的减少浇水代码.关于KVO的学习,可以参考文章:<Key-Value Observing快速入门>:http://www.cocoadev.cn/Objective-C/Key-Value-Observing-Quick-Start-cn.asp Key-Value Coding(KV…
1.KVC KVC是Key-Value-Coding的简称,它是一种可以直接通过字符串的名 字(key)来访问类属性(实例变量)的机制.而不是通过调用Setter.Getter方法访问.当使用KVO.Core Data.CocoaBindings.AppleScript(Mac支持)时,KVC是关键技术.  Person * xw = [[Person alloc]init]; Dog *dg = [[Dog alloc]init]; //使用kvc设置成员变量的值 //使用之前必须得知道变量的…
按钮 自定义按钮:调整内部子控件的frame 方式1:实现titleRectForContentRect:和imageRectForContentRect:方法,分别返回titleLabel和imageView的frame 方式2:在layoutSubviews方法中设置 内边距 // 设置按钮内容的内边距(影响到imageView和titleLabel) @property(nonatomic) UIEdgeInsets contentEdgeInsets; // 设置titleLabel的内…
KVC: (Key Value Coding) 键值编码 所谓KVC,其实就是不通过set和get方法访问对象属性,而是通过属性名字符串动态的去读取属性.KVC其实也是OC反射机制的一种运用. 之所以每个对象都有KVC能力,是因为NSObject类实现了NSKeyValueCoding协议. 属性赋值: setValue:属性值 forKey:属性名 属性读取:   valueForKey:属性名 KVC比较常用的用处是在网络请求后要把得到NSDictionary数据要装入Model中,若要通过…
KVO简介 在 Cocoa 的模型-视图-控制器 (Model-view-controller)架构里,控制器负责让视图和模型同步.这一共有两步:当 model 对象改变的时候,视图应该随之改变以反映模型的变化:当用户和控制器交互的时候,模型也应该做出相应的改变. KVO 能帮助我们让视图和模型保持同步.控制器可以观察视图依赖的属性变化. 1.使用: 1.1.注册与解除注册 NSKeyValueObserverRegistration 的 category 方法将观察者对象与被观察者对象注册与解…
kvc是用来方便的设置实例的属性值的,比如person类的实例p1有一个name的属性,那么我们可以通过kvc去设置p1的name,语法是: [ 对象 setValue:@"xiaming" forKey:@"name"];其中xiaoming就是p1的name,这个就相当于用点语法给p1设置name:p1.name = @"xiaoming"; 以上就是kvc的简单实用.接下来是kvo,kvo是键值观察,如果我想知道某个值,是否变化,变成什么,…
KVC:键值编码,是一种间接访问对象实例变量的机制,可以不通过存取方法(getter setter)就可以访问实例变量. KVO: 属性变化的通知机制…
KVC: 简介: 全称 Key-Value Coding .KVC是一种间接访问对象属性(用字符串表征)的机制,而不是直接调用对象的accessor(setter/getter)方法或是直接访问成员对象.KVC的key值必需小写,并且必须是对象内的属性或变量.可以访问一些没有暴露出来的变量. 使用: [_bank setValue:@"I am Lee" forKey:@"name"]; // 设置值 [_bank valueForKey:@"name&q…
事件循环NSRunLoop 1.run loop概念 NSRunLoop类封装了线程进入事件循环的过程,一个runloop实例就表示了一个线程的事件循环.更具体的说,在iOS开发框架中,线程每次执行完成程序员自定义的代码之后,都会检查当前线程对应的run loop中是否还有其他事件源,如果还有,那么线程就不会终止. 处于事件循环的线程接收的事件源有两种:input source 和 timer source.线程调用便利函数 [NSTimer scheduledTimerWithTimeInte…
Key-Value Coding: 键值编码 (KVC) 方法调用: // 对象属性 // 类似: Person -> name setValue: forKey: // 对象的属性或者 属性的属性...... 可见它已经包含前者. // 类似: Person -> car -> name setValue: forKeyPath: KVC运用了一个isa-swizzling技术. isa-swizzling就是类型混合指针机制, 将2个对象的isa指针互相调换, 就是俗称的黑魔法. K…
Look,这是一个很简单的要求,点击Add me,age +1. 想一想的话很简单的,设置一个属性Nsinteger age,点击button add me,直接加1在重新显示Lable就好啦,不过,我们今天是来练习KVC和KVO的,苹果的键值编程哈哈 首先我们定义一个Human的类,并且完成了它的初始化方法 #import <Foundation/Foundation.h> @interface human : NSObject @property (nonatomic,assign) NS…
KVO 的实现原理 KVO是关于runtime机制实现的 当某个类的对象属性第一次被观察时,系统就会在运行期动态地创建该类的一个派生类,在这个派生类中重写基类中任何被观察属性的setter方法.派生类在被重写的setter方法内实现真正的通知机制 如果原类为Person,那么生成的派生类名为NSKVONotifying_Person 每个类对象中都有一个isa指针指向当前类,当一个类对象的第一次被观察,那么系统就会偷偷讲isa指针指向动态生成的派生类,从而在给被监控属性复制是执行的是派生类的se…