一、了解几个相关的类

1、NSNotification

这个类可以理解为一个消息对象,其中有三个成员变量。

这个成员变量是这个消息对象的唯一标识,用于辨别消息对象。

@property (readonly, copy) NSString *name;

这个成员变量定义一个对象,可以理解为针对某一个对象的消息。

@property (readonly, retain) id object;

这个成员变量是一个字典,可以用其来进行传值。

@property (readonly, copy) NSDictionary *userInfo;

NSNotification的初始化方法:

- (instancetype)initWithName:(NSString *)name object:(id)object userInfo:(NSDictionary *)userInfo;

+ (instancetype)notificationWithName:(NSString *)aName object:(id)anObject;

+ (instancetype)notificationWithName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)aUserInfo;

注意:官方文档有明确的说明,不可以使用init进行初始化

2、NSNotificationCenter

这个类是一个通知中心,使用单例设计,每个应用程序都会有一个默认的通知中心。用于调度通知的发送的接受。

添加一个观察者,可以为它指定一个方法,名字和对象。接受到通知时,执行方法。

- (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName object:(id)anObject;

发送通知消息的方法

- (void)postNotification:(NSNotification *)notification;

- (void)postNotificationName:(NSString *)aName object:(id)anObject;

- (void)postNotificationName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)aUserInfo;

移除观察者的方法

- (void)removeObserver:(id)observer;

- (void)removeObserver:(id)observer name:(NSString *)aName object:(id)anObject;

几点注意:

1、如果发送的通知指定了object对象,那么观察者接收的通知设置的object对象与其一样,才会接收到通知,但是接收通知如果将这个参数设置为了nil,则会接收一切通知。

2、观察者的SEL函数指针可以有一个参数,参数就是发送的死奥西对象本身,可以通过这个参数取到消息对象的userInfo,实现传值。

二、通知的使用流程

首先,我们在需要接收通知的地方注册观察者,比如:

?
1
2
3
4
    //获取通知中心单例对象
    NSNotificationCenter * center = [NSNotificationCenter defaultCenter];
    //添加当前类对象为一个观察者,name和object设置为nil,表示接收一切通知
    [center addObserver:self selector:@selector(notice:) name:@"123" object:nil];

之后,在我们需要时发送通知消息

?
1
2
3
4
    //创建一个消息对象
    NSNotification * notice = [NSNotification notificationWithName:@"123" object:nil userInfo:@{@"1":@"123"}];
    //发送消息
       [[NSNotificationCenter defaultCenter]postNotification:notice];

我们可以在回调的函数中取到userInfo内容,如下:

?
1
2
3
-(void)notice:(id)sender{
    NSLog(@"%@",sender);
}

打印结果如下:

转载于:https://www.cnblogs.com/WxiaoW/p/5132621.html

IOS中通知中心NSNotificationCenter应用总结相关推荐

  1. IOS中通知中心(NSNotificationCenter)的使用总结

    IOS中通知中心NSNotificationCenter应用总结 一.了解几个相关的类 1.NSNotification 这个类可以理解为一个消息对象,其中有三个成员变量. 这个成员变量是这个消息对象 ...

  2. iOS开发之通知中心(NSNotificationCenter)

    前言 面向对象的设计思想是把行为方法封装到每一个对象中,以用来增加代码的复用性.正是这种分散封装,增加了对象之间的相互关联,总是有很多的对象需要彼此了解以及相互操作! 一个简单示例说明这种交互产生的对 ...

  3. 通知中心NSNotificationCenter的使用

    通知中心NSNotificationCenter的使用 Cocoa框架中,通知中心以及KVO都属于设计模式中的观察者. Source 在使用通知中心之前,对通知中心类进行了简单的封装,以便可读性更强. ...

  4. ios注销所有通知_您一直想了解的有关iOS中通知的所有信息

    ios注销所有通知 by Payal Gupta 通过Payal Gupta 您一直想了解的有关iOS中通知的所有信息 (Everything you've always wanted to know ...

  5. iOS 通知中心(NSNotificationCenter)

    NSNotificationCenter 在这里第一步和第二步的顺序可以互换,一般楼主我喜欢先在需要发送消息的页面发送消息,然后再在需要监听的页面注册监听.要注意的是不管是通知中心还是KVO都需要在页 ...

  6. 通知中心 NSNotificationCenter 的简单使用方法

    NSNotificationCenter(通知中心)   [注意]需再dealloc中移除观察者   获取通知中心单例对象 NSNotificationCenter *center=[NSNotifi ...

  7. IOS NSNotification 通知

    一. 先看下官方对NSNotification通知的解释 1. NSNotification 通知 @interface NSNotification : NSObject <NSCopying ...

  8. IOS开发-通知与消息机制

    在多数移动应用中不论什么时候都仅仅能有一个应用程序处于活跃状态.假设其它应用此刻发生了一些用户感兴趣的那么通过通知机制就能够告诉用户此时发生的事情. iOS中通知机制又叫消息机制,其包含两类:一类是本 ...

  9. WWDC 2014 Session笔记 - iOS 通知中心扩展制作入门

    转自:http://onevcat.com/2014/08/notification-today-widget/ 总览 扩展 (Extension) 是 iOS 8 和 OSX 10.10 加入的一个 ...

  10. iOS 通知中心扩展制作入门

    from:http://onevcat.com/2014/08/notification-today-widget/ 扩展 (Extension) 是 iOS 8 和 OSX 10.10 加入的一个非 ...

最新文章

  1. svn服务器搭建及使用 二
  2. centos7安装git_【DevOps】centos7 下的 gitlab托管服务器的介绍与安装
  3. java 转型概念_转型(java)(.net)
  4. CV之FDFA:利用MTCNN的脚本实现对LFW数据集进行FD人脸检测和FA人脸校准
  5. 妙用0元素数组 实现大小可变结构体
  6. 撑起百万亿参数模型想象力!英伟达发布新一代SuperPOD超算,AI算力新巅峰!
  7. JavaScript 使用面向对象的技术创建高级 Web 应用程序
  8. AcWing 869. 试除法求约数(枚举)
  9. 腾讯2019实习生笔试(编程题)
  10. 软件工程 2016.7.3 日报
  11. 联想System x服务器主要硬件Windows Server驱动下载
  12. loadrunner11的安装
  13. 论文查重中需要注意的问题
  14. PHP响应button的onclick事件
  15. graphpad做柱状图_轻松搞定各种柱状图
  16. 感悟+北京and新疆知识点
  17. 订单部分商品退款模型思考
  18. Gnuradio中的命名规则和数据类型
  19. maya 约束批量导入导出
  20. python put指令是什么意思_request.put()但它请求使用PUT在我的Python上使用GET

热门文章

  1. golang 读取Excel 或者map字符型返回结构体数组
  2. 1.6.PHP7.1 狐教程-【版本库客户端 git SourceTree安装配置使用】
  3. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_16-页面静态化-模板管理-模板制作...
  4. zencart 对首页静态化处理
  5. JSTL 学习、应用记录
  6. PHP报错: Can't use method return value in write context
  7. 逆向工程核心原理笔记
  8. 用线程安全随机数解决Random在多线程中随机性重复的问题
  9. Java获取https网页内容报错SSLHandshakeException信任(忽略)所有SSL证书
  10. 关于数据库设计是否需要加入(建立)外键