网站建设开发报价明细,网站页面是自己做还是使用模板,怎么做私人彩票网站,网页设计实验报告实验步骤一、Key-Value Coding (KVC)键值编码 KVC#xff0c;即是指 NSKeyValueCoding#xff0c;一个非正式的 Protocol#xff0c;提供一种机制来间接访问对象的属性。KVO 就是基于 KVC 实现的关键技术之一。 一个对象拥有某些属性。比如说#xff0c;一个 Person 对象有一个 nam…一、Key-Value Coding (KVC)键值编码 KVC即是指 NSKeyValueCoding一个非正式的 Protocol提供一种机制来间接访问对象的属性。KVO 就是基于 KVC 实现的关键技术之一。 一个对象拥有某些属性。比如说一个 Person 对象有一个 name 和一个 age 属性。以 KVC 说法Person 对象分别有一个 value 对应他的 name 和 age 的 key。 key 只是一个字符串它对应的值可以是任意类型的对象。从最基础的层次上看KVC 有两个方法一个是设置 key 的值另一个是获取 key 的值。如下面的例子 // using the KVC accessor (getter) method-valueForKeNSString *personlName [p valueForKey:name];// using the KVC accessor (setter) method.-setValue: forKey:[p setValue:newName forKey:name]; 现在如果 Person 有另外一个 key 配偶spousespouse 的 key 值是另一个 Person 对象用 KVC 可以这样写 // just using the accessor again, same as example aboveNSString *personsName [p valueForKey:name];// this line is different, because it is using// a key path instead of a normal keyNSString *spousesName [p valueForKeyPath:spouse.name]; valueForKey 与 valueForKeyPath 要区分开来valueForKey 可以从一个对象中获取值而valueForKeyPath可以将多个 key 用点号 “.” 分割连接起来比如 [p valueForKeyPath:spouse.name];等同于[[p valueForKey:spouse] valueForKey:name]; 二、Key-Value Observing (KVO)键值观察 Key-Value Observing (KVO) 建立在 KVC 之上它能够观察一个对象的 KVC key path 值的变化。举个例子用代码观察一个 person 对象的 age 变化以下是实现的三个方法 watchPersonForChangeOfAddress: 实现观察observeValueForKeyPath:ofObject:change:context: 在被观察的 key path 的值变化时调用。dealloc 停止观察 static NSString *const KVO_CONTEXT_ADDRESS_CHANGED KVO_CONTEXT_ADDRESS_CHANGEDimplementation PersonWatcher-(void) watchPersonForChangeOfAddress:(Person *)p
{// this begins the observing添加键值监听事件[p addObserver:selfforKeyPath:addressoptions:0context:KVO_CONTEXT_ADDRESS_CHANGED];// keep a record of all the people being observed,// because we need to stop observing them in dealloc[m_observedPeople addObject:p];
}// whenever an observed key path changes, this method will be called
- (void)observeValueForKeyPath:(NSString *)keyPathofObject:(id)objectchange:(NSDictionary *)changecontext:(void *)context{// use the context to make sure this is a change in the address,// because we may also be observing other things-键值改变时对应的操作if(context KVO_CONTEXT_ADDRESS_CHANGED) {NSString *name [object valueForKey:name];NSString *address [object valueForKey:address];NSLog(% has a new address: %, name, address);}
}-(void) dealloc;
{// must stop observing everything before this object is// deallocated, otherwise it will cause crashes-在销毁的时候移除键值监听for(Person *p in m_observedPeople){[p removeObserver:self forKeyPath:address];}[m_observedPeople release];m_observedPeople nil;[super dealloc];} 这就是 KVO 的作用它通过 key path 观察对象的值当值发生变化的时候会收到通知。 转载于:https://www.cnblogs.com/xiaobaichangan/p/5622937.html