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

OC 之 KVO、KVC
KVC:键-值-编码  一种可以直接通过字符串的名字(key)来访问类实例变量的机制。(底层通过getter和setter方法实现)
KVC可以用来访问和设置实例变量的值。
设置方式:[self setValue:aName forKey:@"name"]
等同于 self.name = aName;
访问方式: aString = [self valueForKey:@"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 = [NSNotification notificationWithName: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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值