键值码KVC
通过字符串描述来更改对象状态,
通过指定表示要访问的属性名字的字符串标识符,可以进行类的属性读取和设置
setValue: (设置的值) forKey :(对象属性名或实例变量名称);
valueForKey: (对象属性名或实例变量名称);
键搜索顺序 :
•setValue:forKey:方法首先查找的是-setKey命名的setter,如果不存在则在对象内部查找_key或key的实例变量
•valueForKey方法,首先查找的是-key或 -isKey命名的getter,如果不存在,则在对象内部查找_key或key的实例变量
•注意:使用@property+@synthesize可以自动生成getter和setter,
但是如果为其指定非标准的getter和setter,key的搜索则会出现问题
• 键值编码支持指定键路径 ,对于对象中实例变量或属性是另外一对象的情况非常实用
•使用 -valueForKeyPath: 和 -setValue:forKeyPath 方法来访问键路径
• 如果对象的某个实例变量为NSArray,而其中存放的又是对象
•对NSArray请求一个键值,则会查询数组中的每一个对象来查找这个键,然后将这些结果重新打包为一个NSArray
KVC中的运算—集合运算符
•处理未定义键
–取值可以重写对象的valueForUndefinedKey:方法
–设置值可以重写对象的setValue:forUndefinedKey:方法
键值观察KVO
•编写键值观察分为以下三步:
–注册成为观察者
–定义KVO的回调
–移除观察者
首先调用被观察的对象的 - addObserver: forKeyPath: options: context: 方法注册成为观察者
第一个参数 :常为 self ,接收通知的对象,即观察者
第二个参数 :键路径参数,要观察的键路径
第三个参数 :标识 KVO 希望变化如何传递给观察者,可以使用 | 进行多选
第四个参数 :上下文内存区,通常为 nil
使用KVO第二步需要编写观察者的回调方法
结束对一个对象变化的观察后,需要移除观察者,在观察者对象的dealloc方法中调用- removeObserver: forKeyPath: 方法即可
•第一个参数 为移除的观察者对象
•第二个参数 为观察的键路径
•通知
•通知是 iOS 开发框架中的一种设计模式,内部的实现机制由 Cocoa 框架支持。
•通知一般用于 M 、 V 、 C 之间的信息传递。比如设置页面、设置 App 皮肤。
• NSNotification
•使用通知之前,我们要创建通知对象。 Notification 对象有两个重要的成员变量 : name 和 object 。一般 name 用来唯一标示一个通知对象, object 指通知发送者。
• Notification 对象包含一个参数,就是字典(可选参数),这个字典中存储一些传值过程中的信息,供接收者使用。系统要求这个参数是不可变字典。
eg: NSNotification *notification = nil;
notification = [ NSNotification notificationWithName: aName
object: aObj userInfo: aDictionary];
通知中心(NSNotificationCenter)
•通知创建好后就可以在必要的时候发送通知,发送通知的时候,需要一个控制中心来发送通知,这个控制中心就是通知中心。
•通知中心是通知机制架构的大脑。它允许我们注册通知监听者、发送通知、移除通知监听者。
•一般系统通知不需要我们发送通知。只需要我们注册通知监听者、 移除通知监听者。比如监听视频是否播放完成。
•获取通知中心
+ (NSNotificationCenter *)defaultCenter // 获取通知中心
•发送通知
- (void)postNotification:(NSNotification *)notification // 发送通知
•自定义通知
•自定义通知是指开发人员自己来定义通知。自定义通知的一般步骤:
•注册监听者
•创建并发送通知
•移除监听者
通知和KVO区别
KVO只能监听属性的变化,通过NSString类型的属性名来实现。实现了自动监听,但是观察者得持有被观察者得引用,以便被观察者注册观察者,耦合性高,不利用代码de维护
通过指定表示要访问的属性名字的字符串标识符,可以进行类的属性读取和设置
setValue: (设置的值) forKey :(对象属性名或实例变量名称);
valueForKey: (对象属性名或实例变量名称);
键搜索顺序 :
•setValue:forKey:方法首先查找的是-setKey命名的setter,如果不存在则在对象内部查找_key或key的实例变量
•valueForKey方法,首先查找的是-key或 -isKey命名的getter,如果不存在,则在对象内部查找_key或key的实例变量
•注意:使用@property+@synthesize可以自动生成getter和setter,
但是如果为其指定非标准的getter和setter,key的搜索则会出现问题
• 键值编码支持指定键路径 ,对于对象中实例变量或属性是另外一对象的情况非常实用
•使用 -valueForKeyPath: 和 -setValue:forKeyPath 方法来访问键路径
• 如果对象的某个实例变量为NSArray,而其中存放的又是对象
•对NSArray请求一个键值,则会查询数组中的每一个对象来查找这个键,然后将这些结果重新打包为一个NSArray
KVC中的运算—集合运算符
•处理未定义键
–取值可以重写对象的valueForUndefinedKey:方法
–设置值可以重写对象的setValue:forUndefinedKey:方法
键值观察KVO
•编写键值观察分为以下三步:
–注册成为观察者
–定义KVO的回调
–移除观察者
首先调用被观察的对象的 - addObserver: forKeyPath: options: context: 方法注册成为观察者
第一个参数 :常为 self ,接收通知的对象,即观察者
第二个参数 :键路径参数,要观察的键路径
第三个参数 :标识 KVO 希望变化如何传递给观察者,可以使用 | 进行多选
第四个参数 :上下文内存区,通常为 nil
使用KVO第二步需要编写观察者的回调方法
结束对一个对象变化的观察后,需要移除观察者,在观察者对象的dealloc方法中调用- removeObserver: forKeyPath: 方法即可
•第一个参数 为移除的观察者对象
•第二个参数 为观察的键路径
•通知
•通知是 iOS 开发框架中的一种设计模式,内部的实现机制由 Cocoa 框架支持。
•通知一般用于 M 、 V 、 C 之间的信息传递。比如设置页面、设置 App 皮肤。
• NSNotification
•使用通知之前,我们要创建通知对象。 Notification 对象有两个重要的成员变量 : name 和 object 。一般 name 用来唯一标示一个通知对象, object 指通知发送者。
• Notification 对象包含一个参数,就是字典(可选参数),这个字典中存储一些传值过程中的信息,供接收者使用。系统要求这个参数是不可变字典。
eg: NSNotification *notification = nil;
notification = [ NSNotification notificationWithName: aName
object: aObj userInfo: aDictionary];
通知中心(NSNotificationCenter)
•通知创建好后就可以在必要的时候发送通知,发送通知的时候,需要一个控制中心来发送通知,这个控制中心就是通知中心。
•通知中心是通知机制架构的大脑。它允许我们注册通知监听者、发送通知、移除通知监听者。
•一般系统通知不需要我们发送通知。只需要我们注册通知监听者、 移除通知监听者。比如监听视频是否播放完成。
•获取通知中心
+ (NSNotificationCenter *)defaultCenter // 获取通知中心
•发送通知
- (void)postNotification:(NSNotification *)notification // 发送通知
•自定义通知
•自定义通知是指开发人员自己来定义通知。自定义通知的一般步骤:
•注册监听者
•创建并发送通知
•移除监听者
通知和KVO区别
KVO只能监听属性的变化,通过NSString类型的属性名来实现。实现了自动监听,但是观察者得持有被观察者得引用,以便被观察者注册观察者,耦合性高,不利用代码de维护