OC 之 KVO、KVC、通知(笔记)

来源:互联网 发布:adobe软件如何下载 编辑:程序博客网 时间:2024/05/22 10:40
OC 之 KVO、KVC
KVC:键-值-编码 一种可以直接通过字符串的名字(key)来访问类实例变量的机制。(底层通过getter和setter方法实现)
KVC可以用来访问和设置实例变量的值。
设置方式:[self setValue:aNameforKey:@"name"]
等同于 self.name = aName;
访问方式: aString = [selfvalueForKey:@"name"]
等同于 aString =self.name;
NSnumber:把基本数据类型转换成OC指针类型;

KVO: 键-值-监听定义了一种机制,当对象的属性值发生变化的时候,我们能收到一个“通知”。
NSObject提供了监听机制,所有子类也就全都能进行监听。
KVO是基于KVC来实现的。

实现监听步骤:
(1)、注册监听对象。anObserver指监听者,keyPath就是要监听的属性值,而
context方便传输你需要的数据,它是个指针类型。

-(void)addObserver:(NSObject*)anObserver 

    forKeyPath:(NSString*)keyPath 

      options:(NSKeyValueObservingOptions)options         

      context:(void*)context

其中,options是监听的选项,也就是说明监听返回的字典包含什么值。有两个常用的选项:

            NSKeyValueObservingOptionNew 指返回的字典包含新值。

            NSKeyValueObservingOptionOld   指返回的字典包含旧值。

(2)、实现监听方法。监听方法在Value(属性的值)发生变化的时候自动调用。

-(void)observeValueForKeyPath:(NSString*)keyPath 

                  ofObject:(id)object 

                    change:(NSDictionary*)change 

                   context:(void *)context

 

其中,object指被监听的对象change里存储了一些变化的数据,比如变化前的数据,变化后的数据


通知:
通知是iOS开发框架中的一种设计模式,内部的实现机制由Cocoa框架支持。
通知一般用于M、V、C的间的信息传递。像我在设置页面设置App皮肤。
NSNotification:
使用通知之前,我们要创建通知对象。Notification对象有两个重要的成员变量: name 和 object.一般name用来唯一标示一个通知对象,object指通知发送者。
Notification对象包含一个参数,就是字典(可选参数),这个字典中存储一些传值过程中的信息,供接收者使用。系统要求这个参数是不可变字典。

NSNotification *notification =nil;

notification = [NSNotificationnotificationWithName:aName                                                object:aObj                                             userInfo:aDictionary];


通知中心(NSNotificationCenter)
通知创建好后就可以在必要的时候发送通知,发送通知的时候,需要一个控制中心来发送通知,这个控制中心就是通知中心。
通知中心是通知机制架构的大脑。它允许我们注册通知监听者、发送通知、移除通知监听者。
一般系统通知不需要我们发送通知。只需要我们注册通知监听者、移除通知监听者。像监听视频是否播放完成。

获取通知中心
+ (NSNotificationCenter*)defaultCenter //获取通知中心
发送通知
-(void)postNotification:(NSNotification*)notification //发送通知

系统通知
系统通知是cocoa框架定义好的通知,你只需要在通知中心去注册通知,至于什么时候发送通知,由系统决定。
系统定义好了这些通知的发送时机。一般由通知的名称体现。

//注册通知

[[NSNotificationCenter defaultCenter] addObserver:self 

selector:@selector(didFinish:) 

name:MPMoviePlayerPlaybackDidFinishNotification 

 object:nil];

移除通知:
用完系统通知后,要在通知中心移除。一般放在dealloc方法中移除。也可以放在需要的地方移除。

//移除通知

[[NSNotificationCenter defaultCenter] removeObserver:self 

        name:MPMoviePlayerPlaybackDidFinishNotification

                                      object:nil];

注意:先注册、再发送、最后再移除,必须按照步骤来。

自定义通知:
自定义通知是指开发人员自己来定义通知。自定义通知的一般步骤:
  • 注册监听者
  • 创建并发送通知
  • 移除监听者


0 0