NSNotificationCenter 通知使用方法详解

关于iOS中的通知中心(NSNotificationCenter) 先说一下什么叫通知: iOS中的通知机制又叫消息机制,其包括2类:一类是本地通知;另一类是推送通知,也叫远程通知.两种通知iOS中的表现一致,可以通过横幅或者弹出提醒两种形式告诉用户,并且点击通知可以打开应用程序,但是两种通知的实现原理却完全不同.那么什么是通知中心呢: 对于初学者,往往会把iOS中的本地通知,推送通知iOS通知中心的概念弄混.其实二者之间并没有任何关系,事实上它们都不属于一 阅读详情

你要知道的KVC、KVO、Delegate、Notification都在这里

转载请注明出处 http://blog.csdn.net/u014205968/article/details/78224833

本系列文章主要通过讲解KVC、KVO、Delegate、Notification的使用方法,来探讨KVO、Delegate、Notification的区别以及相关使用场景,本系列文章将分一下几篇文章进行讲解,读者可按需查阅。

NSNotificationCenter 通知的使用方法详解

NSNotificationCenter通知中心是iOS程序内部的一种消息广播的实现机制,可以在不同对象之间发送通知进而实现通信,通知中心采用的是一对多的方式,一个对象发送的通知可以被多个对象接收,这一点与我们前面讲解的KVO机制类似,KVO触发的回调函数也可以被对个对象响应,但代理模式delegate则是一种一对一的模式,委托对象只能有一个,对象也只能和委托对象通过代理的方式通信。

首先看一下比较重要的NSNotification类,这是通知中心的基础,通知中心发送的的通知都会封装成该类的对象进而在不同对象之间传递。其比较重要的属性和方法如下:

//通知的名称,有时可能会使用一个方法来处理多个通知,可以根据名称区分
@property (readonly, copy) NSNotificationName name;
//通知的对象,常使用nil,如果设置了值注册的通知监听器的object需要与通知的object匹配,否则接收不到通知
@property (nullable, readonly, retain) id object;
//字典类型的用户信息,用户可将需要传递的数据放入该字典中
@property (nullable, readonly, copy) NSDictionary *userInfo;

//下面三个是NSNotification的构造函数,一般不需要手动构造
- (instancetype)initWithName:(NSNotificationName)name object:(nullable id)object userInfo:(nullable NSDictionary *)userInfo API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0)) NS_DESIGNATED_INITIALIZER;
+ (instancetype)notificationWithName:(NSNotificationName)aName object:(nullable id)anObject;
+ (instancetype)notificationWithName:(NSNotificationName)aName object:(nullable id)anObject userInfo:(nullable NSDictionary *)aUserInfo;

NSNotification通知类本身很简单,需要着重理解的就是其三个属性,接下来看一下NSNotificationCenter通知中心,通知中心采用单例的模式,整个系统只有一个通知中心,通过如下代码获取:

[NSNotificationCenter defaultCenter]

再看一下通知中心的几个核心方法:

/*
注册通知监听器,只有这一个方法
observer为监听器
aSelector为接到收通知后的处理函数
aName为监听的通知的名称
object为接收通知的对象,需要与postNotification的object匹配,否则接收不到通知
*/
- (void)addObserver:(id)observer selector:(SEL)aSelector name:(nullable NSNotificationName)aName object:(nullable id)anObject;

/*
发送通知,需要手动构造一个NSNotification对象
*/
- (void)postNotification:(NSNotification *)notification;

/*
发送通知
aName为注册的通知名称
anObject为接受通知的对象,通知不传参时可使用该方法
*/
- (void)postNotificationName:(NSNotificationName)aName object:(nullable id)anObject;

/*
发送通知
aName为注册的通知名称
anObject为接受通知的对象
aUserInfo为字典类型的数据,可以传递相关数据
*/
- (void)postNotificationName:(NSNotificationName)aName object:(nullable id)anObject userInfo:(nullable NSDictionary *)aUserInfo;

/*
删除通知的监听器
*/
- (
告别ROS1!在Ubuntu 22.04上为VINS-Fusion适配ROS2 Humble的完整踩坑记录 本文详细记录了在Ubuntu 22.04上将VINS-Fusion从ROS1迁移到ROS2 Humble的完整过程,包括环境搭建、依赖管理、核心代码适配及性能优化。通过实战案例和调试技巧,帮助开发者高效解决迁移过程中的常见问题,提升系统稳定性和性能。 阅读详情

相关推荐

借助ChatGPT完成课题申报书中框架思路写作指南

通过这篇文章的学习,我们可以让ChatGPT先为用户匹配研究理论、研究方法、研究思路、研究内容等,为申请人提供一些参考,能够帮助对拟申报课题有一个初步的认识。当申请人找到了合适的理论、方法和问题后,再借助精细化提示词模型提问,那ChatGPT回答的启发性肯定会有质的提升,更具有使用价值。

智能AI让学术科研更容易 2448

ios NSNotificationCenter通知的简单使用

通知类本身比较简单,大概就分为注册通知监听器、发送通知,注销通知监听器三个方法通知中心(NSNotificationCenter)采用单例的模式,整个系统只有一个通知中心,通过如下代码获取: //获取通知中心 [NSNotificationCenter defaultCenter]; 注册通知监听器方法: //observer为监听器 //aSelector为接到收通知后的处理函数 //aName为监听的通知的名称 //object为接收通知的对象,需要与postNotification的object匹配,否则接收不到通知 - (void)addObserver:(id)observe

Alps and the dangerous forest.CHS

Alps and the dangerous forest.CHS

NSNotificationCenter简单概述

一、NSNotificationCenter 和delegate 的区别 是使用 观察者模式 来实现的用于跨层传递消息的机制 (无需代理,双方无需建立关系) KVO也是观察者模式 NSNotificationCenter使用观察者模式 delegate是使用通知NSNotificationCenter 是一对多

砥砺前行的博客 1462

NSNotificationCenter的理解和运用 教程

通知中心:实现了一对多的消息传递,可以实现跨页面传递。 cocoa消息机制算是同步的,观察者只要向消息中心注册,即可接受其他对象发送来的消息,消息发送者和消息接受者两者可以互相一无所知,完全解耦。这种消息机制可以用应用于任意时间和任何对象,观察者可以有多个。所以消息具有广播的性质,注意:观察者向消息中心注册以后,在不需要接受消息时需要向中心注销,属于典型的观察者模式。 消息通知中重要的两个类: 1)NSNotificationCenter:实现NSNotificationCenter的原理是一个观察者模式,

ACERROR 1685

NSNotificationCenter的底层原理

底层初窥——NSNotificationCenter | 江涛的博客iOS底层系列31 -- Notification的底层原理 - 简书iOS通知底层实现原理

opentogether的博客 649

NSNotificationCenter底层探究

文章目录简单介绍及使用swift版使用ObjectiveC版使用底层NSNotificationCenter - 消息中心named表nameless表wildcard链表添加观察者发送通知移除通知参考文献 简单介绍及使用 通知,简单来说就是,一方使用name发送通知,持有与之相同name的另一方接收通知并进行处理(如果添加的观察者name为空,那么就会接收所有通知)。特点是基本上不用考虑其它影响因素,只需要使用同样的通知名称,监听该通知的对象(即观察者)再对通知做出反应即可。降低耦合度 swift版使用

吃橘子 797

ios 通知接收两次_iOS通知中心(NSNotificationCenter)的使用总结

iOS通知中心NSNotificationCenter应用总结一、了解几个相关的类1、NSNotification这个类可以理解为一个消息对象,其中有三个成员变量。这个成员变量是这个消息对象的唯一标识,用于辨别消息对象。@property(readonly,copy)NSString*name;这个成员变量定义一个对象,可以理解为针对某一个对象的消息。@property(readonly,ret...

weixin_39735288的博客 741

IOS NSNotificationCenter 通知中心

今天我们来了解一下 NSNotificationCenter 消息通知中心这个类 一个NSNotificationCenter对象在一个程序内,提供一个广播消息的机制 一个NSNotificationCenter对象从本质上来说是一个通知调度表 每一个正在运行的程序都有一个默认的通知中心,所以你一般不用创建自己 的通知中心,并且一个NSNotificationCenter对象只能在单个

iOS 刘通超 2445

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

IOS通知中心NSNotificationCenter应用总结 一、了解几个相关的类 1、NSNotification 这个类可以理解为一个消息对象,其中有三个成员变量。 这个成员变量是这个消息对象的唯一标识,用于辨别消息对象。 @property(readonly,copy)NSString*name; 这个成员变量定义一个对象,可以理解为针对某一个对...

ayaya001100的博客 132

iOS开发:NSNotificationCenter通知机制详解与实战

实际体验时,发现其生成的iOS项目可以直接运行调试,不需要配置复杂的开发环境。特别是处理通知这类需要多页面联动的功能时,平台提供的实时预览能快速验证通信效果,比传统Xcode调试更直观高效。对于单次通知使用block版本并设置NSNotificationSuspensionBehavior。响应方法使用@selector语法声明,且参数类型固定为NSNotification。使用NSNotificationQueue合并短暂间隔内的通知。通过instrument的Allocations检测观察者泄漏。

MoonbeamOwl67的博客 1047

iOS通知使用NSNotificationCenter

在实际的开发中,通知这一手段还是比较常用的。那今天就详细讲讲通知。 1.通知中心(NSNotificationCenter)实际是在程序内部提供了一种广播机制。把接收到的消息,根据内部的消息转发表,将消息转发给需要的对象。这句话其实已经很明显的告诉我们要如何使用通知了。第一步:在需要的地方注册要观察的通知,第二步:在某地方发送通知。(这里注意:发送的通知可能是我们自定义的,也可能是系统的)。

gujinyue 2万+

iOS 通知中心 NSNotificationCenter & NSNotification

通知中心是 Foundation 框架的一个子系统,它向应用程序中注册为某个事件观察者的所有对象广播消息(即通知)。(从编程角度而言,它是 NSNotificationCenter 类的实例)。该事件可以是发生在应用程序中的任何事情,例如进入后台状态,或者用户开始在文本栏中键入。通知是告诉观察者,事件已经发生或即将发生,因此让观察者有机会以合适的方式响应。通过通知中心来传播通知,是增加应用程序对象

小邓笔记 2万+

通知中心(NSNotificationCenter)

今天来跟大家分享一个下通知中心(NSNotificationCenter),也有称之为观察者模式的。这个模式在IOS开发同代理模式相类似,也主要用于监听。但是却有本质的区别,因为我们在使用代理模式进行开发的时候,一般都是一对一的监听和回调。而通知中心,实现了多对多的机制。 对于通知中心,我们要通过三个方面来学习 1.通知的发布,也有人称之为注册 2.通知的监听 3.通知的移除 ...

QQ644387925的博客 348

ios 通知注销_iOS 通知中心(NSNotificationCenter)

NSNotificationCenter在这里第一步和第二步的顺序可以互换,一般楼主我喜欢先在需要发送消息的页面发送消息,然后再在需要监听的页面注册监听。要注意的是不管是通知中心还是KVO都需要在页面销毁之前移除监听。注册观察者/*** 观察者注册消息通知** @param addObserver 观察者 self** @param selector 回调方法 n...

weixin_39873208的博客 370

iOS基础——通知代理之NSNotificationCenter、Delegate

iOS基础——通知代理之NSNotificationCenter、Delegate前言 NSNotificationCenter就像Android的广播接收者,它可以通过发送通知,让监听通知的者收到通知,并执行相应事件,它是一种一对多的事件通知 Delegate就像Android的监听接口,它可以通过实现Delegate,并实现其方法,通过调用方法即可获取Delegate里面传过来的内容 一、NSN

点击置顶文章查看博客目录(全站式导航) 1792

使用NSNotificationCenter 事件通知

在进行与服务器通信的时候,经常是一个UI类去请求服务器数据,然后服务器将回调到appDelegate,这个时候我以前的做法是在AppDelegate中保存 和维护这个UI类的指针,然后appDelegate在收到返回消息的时候,如果这个UI类的指针还存在,并且不为NULL,那么就直接调用UI类的指针。这种方法太麻烦了。          今天才发现有NSNotificationC

梦醒梦飞翔的专栏 492

iOS NSNotificationCenter 接收不到通知消息

作者:Gintok 链接:https://www.jianshu.com/p/e368a18ca7c2 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 通知使用 NSNotificationCenter通知中心是iOS程序内部的一种消息广播的实现机制,可以在不同对象之间发送通知进而实现通信,通知中心采用的是一对多的方式,一个对象发送的通知可以被多个对象...

LeeCSDN77的博客 2872

object c NSNotificationCenter 通知中心

Object C的NSNotificationCenter类似android的广播 Objective-C 1234567891011121314@implementation Boss-(void)sendNotification{    //发送通知    NSDictionary

ifengkeyi的博客 602

IOS通知中心NSNotificationCenter应用总结

目录[-] IOS通知中心NSNotificationCenter应用总结 一、了解几个相关的类 1、NSNotification 2、NSNotificationCenter 二、通知使用流程 IOS通知中心NSNotificationCenter应用总结 一、了解几个相关的类 1、NSNotification 这个类可以理解为一个消...

angbi0981的博客 127

iOS通知中心NSNotificationCenter应用总结

iOS通知中心NSNotificationCenter应用总结 一、了解几个相关的类 1、NSNotification 这个类可以理解为一个消息对象,其中有三个成员变量。 这个成员变量是这个消息对象的唯一标识,用于辨别消息对象。 @property (readonly, copy) NSString *name;   这个成员变量定义一个对象,可

LG_CodeMachine的博客 674
上一篇: Protocol与Delegate 使用方法详解
下一篇: KVO、Delegate、Notification 区别及相关使用场景
这个名字到底好不好
博客等级 码龄12年 84粉丝 32原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值