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. 天龙客户端的ResourceManager

    今天培训的时候,Leader针对项目结构讲了很多分层架构的思想,思路,对我而言有很大的助益,学会了将需求分层,或者说先设计出各个层次,然后有需求后落实到对应的层次上,尤其对于刚开始的架构设计阶段,能把 ...

  2. 揭秘Facebook首个数据中心:全球15亿用户的账户信息都在这里

      投递人 itwriter 发布于 2016-07-14 17:41 评论(0) 原文链接 [收藏]  对于 Facebook.Google 这种体量的科技公司而言,数据中心应该是处于军事级别的保密 ...

  3. C# 面试的“区别”

    1.静态变量与非静态变量的区别 静态变量--static.直接类名+变量名.静态函数里不能用非静态变量. 访问同一类中所有实例同一静态变量都是同一值.非静态变量则不是. 2.const与readonl ...

  4. 【BZOJ 2820】YY的GCD

    线性筛积性函数$g(x)$,具体看Yveh的题解: http://sr16.com:8081/%e3%80%90bzoj2820%e3%80%91yy%e7%9a%84gcd/ #include< ...

  5. poj2553 强连通缩点

    The Bottom of a Graph Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 10114   Accepted: ...

  6. java 读取数据库中表定义

    将数据库中的表信息读取出来 package com.cloud.smartreport.utils; import java.sql.Connection; import java.sql.Datab ...

  7. 怎么学习AOPR使用方法

    Advanced Office Password Recovery作为一款专业级别的Office密码破解工具,对十几种office文档的密码都可以有效的破解.一些用户朋友才开始接触Advanced O ...

  8. vim选中字符复制/剪切/粘贴

    转载自:http://www.cnblogs.com/luosongchao/p/3193153.html 问题描述: vim 中选中指定字符,进行复制/剪切/粘贴 选择:1.普通模式下--v+hjk ...

  9. 用git管理源代码

    自从做iOS开发的一年多以来,之前一直都是用svn进行代码管理.因为工作需要,我也开始用git管理源代码.关于git的基本使用,在此做一个详细的介绍,希望能对初次接触git的人有所帮助! 本篇博客针对 ...

  10. 卸载移动硬盘出现 device is busy

    umount /dev/sdb1 # device is busy fuser -m -v /dev/sdb1 # 查看 fuser -m -k /dev/sdb1 # 杀死进程