NSNotificationCenter(通知)与Key-Value Coding (KVC)与Key-Value Observing (KVO)
2015-11-23 15:40
239 查看
NSNotificationCenter
//下面是不同类中需要实现的代码
1.[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sender:) name:@"刘冠" object:nil];//通知接收者(监听者)
-(void) sender:(NSNotification *)input
{
NSLog(@"%@",input.object) ;
}
//引用计数为0的情况下,当内存回收时会调用dealloc(C++析构函数,做最后的内存清理工作)方法
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"刘冠" object:nil];//要移除该通知监听
}
2.[[NSNotificationCenter defaultCenter] postNotificationName:@"刘冠" object:@"刘冠"];//通知发送者(被监听者)
通知的发送者可以为系统中已定义过的,我们只需注册监听,例如视频播放类MPMoviePlayerViewController中的暂停按钮,只需注册即可,例如
[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(fanction) name:MPMoviePlayerPlaybackDidFinishNotification object:nil];监听视频停止
kvc与kvo(键值编码 键值观察)
//下面是不同类中需要实现的代码
1.[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sender:) name:@"刘冠" object:nil];//通知接收者(监听者)
-(void) sender:(NSNotification *)input
{
NSLog(@"%@",input.object) ;
}
//引用计数为0的情况下,当内存回收时会调用dealloc(C++析构函数,做最后的内存清理工作)方法
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"刘冠" object:nil];//要移除该通知监听
}
2.[[NSNotificationCenter defaultCenter] postNotificationName:@"刘冠" object:@"刘冠"];//通知发送者(被监听者)
通知的发送者可以为系统中已定义过的,我们只需注册监听,例如视频播放类MPMoviePlayerViewController中的暂停按钮,只需注册即可,例如
[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(fanction) name:MPMoviePlayerPlaybackDidFinishNotification object:nil];监听视频停止
kvc与kvo(键值编码 键值观察)
#import <Foundation/Foundation.h> #import "Teacher.h" int main(int argc, const char * argv[]) { @autoreleasepool { Student *student = [[Student alloc]init]; student.name = @"liuguan"; student.age = @"30"; //一个非正式的 Protocol,提供一种机制来间接访问对象的属性 // [student setValue:@"liuguan" forKey:@"name"];//kvc // [student setValue:@"30" forKey:@"age"];//kvc Teacher *teacher = [[Teacher alloc]init]; [teacher listening:student]; // [student setValue:@"liuguanNew" forKey:@"name"];//kvc // [student setValue:@"33" forKey:@"age"];//kvc student.name = @"liuguanNew"; student.age = @"32"; } return 0; } #import "Teacher.h" @implementation Teacher //Key-Value Observing (KVO) 它能够观察一个对象的 KVC key path 值的变化。举个例子,用代码观察一个 Student 对象的 name、age 变化, - (void)listening:(Student *)stu { _s = stu;//指向同一块地址 //给对象的的属性添加监听(注册) //第一个stu代表被观察对象,第二个 self 要成为观察者的对象,第三个:被观察者对象属性的名字,第四个代表改变前后的值,最后一个直接设置nil [stu addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew context:nil] ; [stu addObserver:self forKeyPath:@"age" options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew context:nil] ; } //只有被监控的值重新被赋值时,才调用此方法 //第一个形参keypath代表被观察者对象属性的名字,通过该参数可以判断是哪个属性发生了改变,参数二:被观察者对象 参数三:改变前后的值的字典 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { NSLog(@"Path%@",keyPath); NSLog(@"Object%@",object); NSLog(@"change%@",change); NSLog(@"contex%@",context); } //引用计数为0的情况下,当内存回收时会调用dealloc(C++析构函数,做最后的内存清理工作)方法 -(void)dealloc{ [_s removeObserver:self forKeyPath:@"age"];//移除 [_s removeObserver:self forKeyPath:@"name"];//移除} } @end
相关文章推荐
- UIImageView中图片尺寸模式
- Kibana User Guide [4.2] » Settings » Managing Fields
- [iOS]UITableView优化技巧
- 深度学习String、StringBuffer、StringBuilder
- impdp卡住,遇到等待事件Streams AQ: enqueue blocked on low memory
- [Leetcode]Range Sum Query - Immutable
- iOS8新特性 UIPresentationController(一)
- Kibana User Guide [4.2] »Settings
- Lesson 11 Not guilty
- UE4简单巡逻BehaviorTree的构建
- String,StringBuffer,StringBuilder
- easyui textbox 添加 onblur 失去焦点事件
- 定制UIButton中文字和图片的位置
- 053-14 You have a very large table that your users access frequently. Which of the following advisor
- iOS UISearchBar简单使用与简介
- 移动设备上的UI布局新方向(思路)
- [iOS]UIScrollView 使用 Autolayout
- CheckListBox获取多选的项文本和Value值
- UIButton文字的显示位置,字体的大小
- Kibana User Guide [4.2] » Dashboard