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(键值编码 键值观察)

#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 = @"";
//一个非正式的 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 = @""; }
return ;
}
#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

NSNotificationCenter(通知)与Key-Value Coding (KVC)与Key-Value Observing (KVO)的更多相关文章

  1. iOS key value coding kvc在接收json数据与 model封装中的使用

    iOS key value coding  kvc在接收json数据与 model封装中的使用 使用 kvc 能够极大的简化代码工作,及以后的接口维护工作: 1:先创建MovieModel类.h和 . ...

  2. NSNotificationCenter通知中心

    概述 NSNotificationCenter通知中心,通常用于一对一或者一对多的消息传递,即当一个地方改变时,要求改变其他的一些地方,例如当网络请求回来了新的数据,需要刷新本地信息和本地内存里面的界 ...

  3. 'NSUnknownKeyException' … setValue:forUndefinedKey:]: …not key value coding compliant

    解决一个问题: 当我添加一个IBout, 报了如下错误 NSUnknownKeyException' … setValue:forUndefinedKey:]: …not key value codi ...

  4. setValue:forUndefinedKey this class is not key value coding-compliant for the key

    下午开发过程中遇到一个错误,结果被的真惨,从上午 11 点查错一直查到下午 2 点才找到错误的原因,真的郁闷的不行. 关于查错这么久,主要的原因是:   1. 自己对 IOS 开发还不熟悉2. 不知道 ...

  5. 数据库操作提示:Specified key was too long; max key length is 767 bytes

    操作重现: 法1:新建连接——>新建数据库——>右键数据库导入脚本——>提示:Specified key was too long; max key length is 767 by ...

  6. Mysql Specified key was too long; max key length is 767 bytes

    今天导入一个数据库时,看到以下报错信息: Specified key was too bytes 直译就是索引键太长,最大为767字节. 查看sql库表文件,发现有一列定义如下: 列   名:cont ...

  7. iOS: setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key name.

     这里指抛出一个假设:   如 果你在 storyboard中, 通过 Ctrl - Drag 方式声明了一个 @property , 但你又觉得 在 Ctrl - Drag 时 ,命名的proper ...

  8. Specified key was too long; max key length is 767 bytes mysql

    Specified key was too long; max key length is 767 bytes 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该 ...

  9. 'NSUnknownKeyException' this class is not key value coding-compliant for the key XXX

    错误: Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ setValue:forUndefi ...

随机推荐

  1. eclipse的历史版本及下载

    有时候我们总会遇到在需要eclipse而无法及时找到的时候, 所以那些有用的链接, 是帮助我们能够及时找到我们想要版本的额最好方式 Eclipse 3.1 IO[木卫一,伊奥] 2005 http:/ ...

  2. android 开发之 百度地图的使用

    好久没写博客了,最近遇到个新需求 需要用到百度地图的基础地图,定位,理论上应该还会用到鹰眼的功能吧.具体还很难说.我现在 刚动工,就从头开始记录吧. 首先是先申请一个百度地图api的key 流程官网很 ...

  3. background-image 和 img

    一:解决div里面的img图像宽度不变,高度不变!   超出div部分设置隐藏! 图片:1920x526 div容器: 1423x526 1. background-image:样式实现 img: 标 ...

  4. mySql引擎

    摘自: http://www.cnblogs.com/sopc-mc/archive/2011/11/01/2232212.html MySql引擎很多,最常见的有InnoDB,MyISAM,NDM ...

  5. Jenkins的maven工程打包的时候怎么指定不同环境的配置文件

    http://outofmemory.cn/code-snippet/6643/maven-profile-define-enviroment-package 在打包的时候我们添加上 这里我们指定配置 ...

  6. bzoj1503

    treap改了好长时间,erase写错了... #include<iostream> #include<cstdio> #include<cstdlib> usin ...

  7. BZOJ 1123: [POI2008]BLO

    1123: [POI2008]BLO Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1030  Solved: 440[Submit][Status] ...

  8. 【bzoj2705】 SDOI2012—Longge的问题

    http://www.lydsy.com/JudgeOnline/problem.php?id=2705 (题目链接) 题意 给定一个整数N,你需要求出∑gcd(i, N)(1<=i <= ...

  9. Ajax请求接口加密研究(针对网页前端的接口安全加密机制研究)

    通常我们在h5前端调用后台接口时,一般是ajax,那么接口的安全成了一个问题. 这里可以肯定的说,前端调用的接口一定要验证! 然后剖析了微信网页版.京东网页版这些,也都是通过接口的形势绑定数据,所以在 ...

  10. [NOIP2014] 提高组 洛谷P2312 解方程

    题目描述 已知多项式方程: a0+a1x+a2x^2+..+anx^n=0 求这个方程在[1, m ] 内的整数解(n 和m 均为正整数) 输入输出格式 输入格式: 输入文件名为equation .i ...