1. 通告和委托的区别

通告也能传递与事件相关的数据。通告不同于委托的地方在于,通告是在对象执行完成动作之后产生,而不是之前。受到通告的对象没有机会建议是否要执行动作,而且对象的通告可以有多个监听者(observer),但是只有一个委托对象。

2. 通告的工作机制

a. 对应用程序中其他地方发生的事件(比如增加一条数据库记录)感兴趣的对象,会向通告中心(Notification Center,NSNotificationCenter类的实例)注册,从而成为该事件的监听者。在注册过程中,监听者需要指定方法供通告中心在事件发 生时调用。

b.给数据库添加记录(或者类似事件)的对象给通告中心发一个通告(NSnotification的实例)。该通告对象包括识别通告的标志、发布通告的对象ID和可选的附加信息字典。

c.通告中心发送消息到每个已注册的监听者,调用监听者指定的方法会将通告传给这些监听者。

3.如何使用通告

a.通告如何工作

发布通告的类在头文件中将要通告的名称定义为静态NSString对象。例如NSWindow类在它的头文件中定义了16个通告,使其他对象可以监视该窗口的状态变化。

APPKIT_EXTERNNSString *NSWindowWillBeginSheetNotification;

b.通告的执行

下面的例子,通告中心一旦收到NSWindowWillBeginSheetNotification通告,就调用sheetDidBegin:方法。

- (id)initWithFrame:(NSRect)frame {

self = [super initWithFrame:frame];

if (self) {

NSNotificationCenter *center = [NSNotificationCenterdefaultCenter];

[centeraddObserver:selfselector:@selector(sheetDidBegin:)name:NSWindowWillBeginSheetNotificationobject:nil];

}

returnself;

}

- (void)sheetDidBegin:(NSNotification *)notification

{

NSLog(@"Notification: %@",[notificationname]);

}

c.要记得从通告中心删除对象

- (void)dealloc{

//防止通告中心将消息发给不存在的对象

[[NSNotificationCenterdefaultCenter]removeObserver:self];

[superdealloc];

}

4.自定义通告

a.首先定义通告的名称-- (在动作发送的那个类里面定义)

如我做的简单例子是View里面的一个按钮点击的时候通知主界面

extern
NSString*ButtonClickedNotification; 
//@"ButtonClicked"

b.注册通告

NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];

[ncaddObserver:selfselector:@selector(responseButtonClick:) name:ButtonClickedNotification object:nil];

c.处理通告

- (void)responseButtonClick:(NSNotification *)nt {

TestViewCtrl *currentViewCtrl = [nt object];

NSString *result = [currentViewCtrl value];

NSLog(@"valuefrom view:%@",result);

}

d.动作发生的时候发送通知给监听者

- (IBAction)clickBtn:(id)sender {

NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];

self.value = @"Hello world";

[ncpostNotificationName:ButtonClickedNotification object:self];

}

f.最后,同上,dealloc的时候要从通告中心删除对象

objective-c 通告的更多相关文章

  1. Automake

    Automake是用来根据Makefile.am生成Makefile.in的工具 标准Makefile目标 'make all' Build programs, libraries, document ...

  2. Objective C中的ARC的修饰符的使用---- 学习笔记九

    #import <Foundation/Foundation.h> @interface Test : NSObject /** * 默认的就是__strong,这里只是做示范,实际使用时 ...

  3. Objective的字符串拼接 似乎没有Swift方便,但也可以制做一些较为方便的写法

    NSString *str1 = @"字符串1"; NSString *str2 = @"字符串2"; //在同样条件下,Objective的字符串拼接 往往只 ...

  4. [转] 从 C 到 Objective C 入门1

    转自: http://blog.liuhongwei.cn/iphone/objective-c/ 进军iPhone开发,最大的难点之一就是怪异的Objective C语法了.不过,了解之后才发现,原 ...

  5. Objective C运行时(runtime)

    #import <objc/runtime.h> void setBeingRemoved(id __self, SEL _cmd) { NSLog(@"------------ ...

  6. Objective C ARC 使用及原理

    手把手教你ARC ,里面介绍了ARC的一些特性, 还有将非ARC工程转换成ARC工程的方法 ARC 苹果官方文档 下面用我自己的话介绍一下ARC,并将看文档过程中的疑问和答案写下来.下面有些是翻译,但 ...

  7. Objective -C学习笔记之字典

    //字典:(关键字 值) // NSArray *array = [NSArray array];//空数组 // NSDictionary *dictionary = [NSDictionary d ...

  8. 刨根问底Objective-C Runtime

    http://chun.tips/blog/2014/11/05/bao-gen-wen-di-objective%5Bnil%5Dc-runtime-(2)%5Bnil%5D-object-and- ...

  9. Objective-C( Foundation框架 一 字符串)

    Objective-C 中核心处理字符串的类是 NSString 与 NSMutableString ,这两个类最大的区别就是NSString 创建赋值以后该字符串的内容与长度不能在动态的更改,除非重 ...

  10. Objective C类方法load和initialize的区别

    Objective C类方法load和initialize的区别   过去两个星期里,为了完成一个工作,接触到了NSObject中非常特别的两个类方法(Class Method).它们的特别之处,在于 ...

随机推荐

  1. swoole多进程处理产生的问题

    以前用swoole的时候,没有涉及到数据库连接,碰到问题没有那么多,后来公司业务原生来写swoole多进程,问题出现很多 1.多进程之间会产生进程隔离,global无效,不能共用一个mysql,red ...

  2. Ubuntu 16.04 安装OpenSSH7.4

      前几天突然收到接到网安总队下发通知说我们在aws里面的服务器存在重大漏洞及安全隐患.必须在规定时间内修改.我们收到邮件打开Excel发现这些问题 是由于OpenSSH版本太低导致的.于是便安排紧急 ...

  3. Rabin_Karp(hash) HDOJ 1711 Number Sequence

    题目传送门 /* Rabin_Karp:虽说用KMP更好,但是RK算法好理解.简单说一下RK算法的原理:首先把模式串的哈希值算出来, 在文本串里不断更新模式串的长度的哈希值,若相等,则找到了,否则整个 ...

  4. DHTML_____window对象的事件

    <html> <head> <meta charset="utf-8"> <title>window对象事件</title&g ...

  5. DB 集中管理之探讨

    DB 集中管理之探讨 1.监控的集中管理. 2.schema 变更的集中管理. 3.备份的集中管理. 4.补丁的集中管理. 5.架构的集中管理.

  6. Java内存模型原理,你真的理解吗?

    [51CTO.com原创稿件]这篇文章主要介绍模型产生的问题背景,解决的问题,处理思路,相关实现规则,环环相扣,希望读者看完这篇文章后能对 Java 内存模型体系产生一个相对清晰的理解,知其然知其所以 ...

  7. 全志A33平台编译linux(分色排版)V1.1

    全志A33平台编译linux 大文实验室/大文哥 壹捌陆捌零陆捌捌陆捌贰 21504965 AT qq.com 完成时间:2017/12/13 10:41 版本:V1.1 (一)解压缩lichee备用 ...

  8. 微信小程序打卡第五天

    2018-02-1823:55:53大年初三 微信小程序已经学了5个夜晚了,没有很努力,只是简单地接触,感觉从今天开始有了突破的进展,很爽! 无意间发现一个很好的教程,也是一个老哥分享的,很给力 ht ...

  9. 关于 VS 调用存储过程加载很慢和SQL 执行很快的那些事

    执行同样的存储过程,调用同样的参数 在VS 中调用存储过程和传参后,到数据加载需要20秒或更多, 在SQL直接调用则不到一秒,同一个存储过程为什么有这么大的区别呢? 原因:存储过程计划失效的原因 产生 ...

  10. codeforces_304C_数学题

    C. Lucky Permutation Triple time limit per test 2 seconds memory limit per test 256 megabytes input ...