iOS 通知机制

ios 通知中心 http://blog.youkuaiyun.com/lengshengren/article/details/14163293 博客demo 立即下载

1 通知的发布

**通知中心(NSNotificationCenter)**
每一个应用程序都有一个通知中心实例,专门来负责协助不同对象之间的消息通信
任何一个对象都可以向通知中心发布通知,描述自己在做什么,其他感兴趣的对象可以申请在某个特定通知发布时(或者在某个特定的对象发布通知时)收到通知![如下所示](https://img-blog.youkuaiyun.com/20160424124752621)
**通知(NSNotification)**
一个完整的通知一般包含3个属性:
- (NSString *)name;   //通知名称
    - (id)object;  // 通知发布者 (是谁要发布通知)
    - (NSDictionary *)userInfo; //一些额外的信息(通知发布者传递给通知接收者的信息内容)
初始化一个通知对象
+ (instancetype) notificationWithName: (NSString *)aName object: (id)onObject;
+  (instancetype) notificationWithName:(NSString *)aName object:(id)onObject userInfo:(NSDictionary *aUserInfo);
- (instancetype)initWithName:(NSString *)aName object:(id) object userInfo: (NSDictionary *)userInfo;
**发布通知**
通知中心提供了相应的方法来发布通知
- (void) postNotification:(NSNotification *)notification; //发布一个notification通知,可在notification最想中设置通知的名称、通知发布者,额外信息等
    - (void) postNotificationName:(NSString *)aName object:(id)anObject;//发布一个名称为aName的通知,anObject为这个通知的发布者
    - (void)postNotificationName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary  *)aUserInfo; //发布一个名称为aName的通知,anObject为这个通知的发布者,aUserInfo为额外信息

2 通知的监听

**注册通知监听器**
通知中心提供了方法来注册一个监听通知的监听器(observer)
- (void) addObserver:(id) observer selector: (SEL) aSeletor name: (NSString *)aName object: (id)anObject;
//observer:监听器,谁要接听这个通知
//aSelector: 收到通知后,回调监听器的这个方法,并且把通知对象当做参数传入
// aName:通知的名称,如果为nil ,那么无论通知的名称是什么,监听器都能收个这个通知
//anObject:通知发布者,如果为anObject和aName都为nil,监听器都受到所有的通知




- (id) addObserverForName:(NSString *)name object: (id)obj queue: (NSOperationQueue *)queue usingBlock: (void (^)(NSNotification *note))block;
//name : 通知的名称
//obj: 通知发布者
//block:收到对应的通知时,会回调哪个block
//queue: 决定了block在哪个操作队列中执行,如果传nil,默认在当前队列中同步执行。

3.通知的移除

通知中心不会保留监听器对象,在通知中心注册过的对象,必须在该对象释放前取消注册,否则,当相应的通知再次出现时,通知中心仍然会向该监听器发送消息,因为相应的监听器对象已经被释放了,所以可能导致应用崩溃
取消注册监听器:
通知中心不会保留监听器对象,在通知中心注册过的对象,必须在该对象释放前取消注册,否则,在相应的通知再次出现时,通知中心仍然会向该监听器发送通知,但是相应的监听器已经被释放啦,这就有可能导致应用崩溃

-(void) removeObserver: (id) observer;
-(void) removeObserver:(id) observer name: (NSString *)aName (id) object;般在监听器销毁之前取消注册

- (void) dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver : self];
}

举个栗子

举一个杂志公司送杂志的例子

我新建两个类,一个是CZPerson类,一个是CZCompany 类,各定义一个name属性
如图所示

由person对象订阅company的通知,然后company发布通知,
这里写图片描述

person收到通知后调用receiveMagazine方法:
这里写图片描述

取消监听:

这里写图片描述

运行:

这里写图片描述

系统中使用了很多通知的例子

  1. UIDevice通知:
    UIDevice类提供了一个单例对象,它代表着设备,通过它可以获得一些设备相关的信息,比如电池电量值(batteryLevel)、电池状态(batteryState)、设备的类型(model,比如iPod、iPhone等)、设备的系统(systemVersion)

通过[UIDevice currentDevice]可以获取这单例对象

UIDevice对象会不间断地发布一些通知,下列是UIDevice对象所发布通知的名称常量:
UIDeviceOrientationDidChangeNotification // 设备旋转
UIDeviceBatteryStateDidChangeNotification // 电池状态改变
UIDeviceBatteryLevelDidChangeNotification // 电池电量改变
UIDeviceProximityStateDidChangeNotification // 近距离传感器(比如设备贴近了使用者的脸部)

  1. 键盘通知:

键盘状态改变的时候,系统会发出一些特定的通知
UIKeyboardWillShowNotification // 键盘即将显示
UIKeyboardDidShowNotification // 键盘显示完毕
UIKeyboardWillHideNotification // 键盘即将隐藏
UIKeyboardDidHideNotification // 键盘隐藏完毕
UIKeyboardWillChangeFrameNotification // 键盘的位置尺寸即将发生改变
UIKeyboardDidChangeFrameNotification // 键盘的位置尺寸改变完毕

系统发出键盘通知时,会附带一下跟键盘有关的额外信息(字典),字典常见的key如下:
UIKeyboardFrameBeginUserInfoKey // 键盘刚开始的frame
UIKeyboardFrameEndUserInfoKey // 键盘最终的frame(动画执行完毕后)
UIKeyboardAnimationDurationUserInfoKey // 键盘动画的时间
UIKeyboardAnimationCurveUserInfoKey // 键盘动画的执行节奏(快慢)

通知和代理的相同点和不同点:

共同点
利用通知和代理都能完成对象之间的通信
(比如A对象告诉D对象发生了什么事情, A对象传递数据给D对象)

不同点
代理 : 一对一关系(1个对象只能告诉另1个对象发生了什么事情)
通知 : 多对多关系(1个对象能告诉N个对象发生了什么事情, 1个对象能得知N个对象发生了什么事情)

【CTFSHOW】web入门 黑盒测试 文章目录写在前面web380web381web382web383web384web385web386web387web388web389web390web391web392web393web394web395参考资料 写在前面 一直没搞过渗透,先学学黑盒测试吧 web380 进入题目发现是一个关于灯泡的悲伤故事,点进去,看到跳转到page_1.php页面。 我们访问page.php试试: 发现报错:$id.php,可以猜想需要传名称为id的参数,来访问id.php。我们访问page.php?id=1试试 阅读详情

相关推荐

EPLAN二次开发实战:从API接口到定制化功能的完整指南

本文为电气工程师和自动化设计师提供了一份EPLAN二次开发的完整实战指南。文章详细介绍了从脚本、插件到独立程序三种开发模式,重点讲解了如何使用C#或VB.NET通过API接口操作EPLAN数据模型,实现定制化功能以提升设计效率,并分享了开发环境搭建、调试及项目打包分发的避坑经验。

c6d7e8f9g的博客 1116

iOS 通知(NSNotification)

一、通知 1、基本概念 NSNotification 是iOS中一个调度消息通知的类,采用单例模式设计,在程序中实现传值、回调等地方应用很广。在iOS中,NSNotification & NSNotificaitonCenter是使用观察者模式来实现的用于跨层传递消息。 2、什么情况下使用通知 观察者模式:定义对象间的一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象都得道通知并自动更新。 二、通知的特点 是使用观察者模式来实现的用于跨层传递消息的机制; 传递方式为一对多; 三

xiaoxiaobukuang的专栏 3245

Win10网络图标消失,网络图标变成灰色,打开网络设置闪退等问题解决

介绍 主要解决如下问题 网络图标消失 常用方法配置中出现的网络图标变成灰色没有办法打开 打开网络和Internet闪退 错误提示`网络发现已关闭。网络计算机和设备不可见。请启动网络和共享中心的网络发现。 连不上网,诊断结果为 依赖服务或组无法启动 这个问题大概率通过重装系统不能解决,请大家谨慎测试之后最后选择重装这个路线。 方法1:这一步一定要做(卸载三方软件) 把360安全卫士,软件管家这些东西都卸载掉。 我的问题一开始就是这个软件引起的,可能他检测到我还给台式机配了无线网卡,然后就把有线网络的一些

呆呆象呆呆的博客 3万+

iOS知识点---通知

iOS中的通知(Notification)是一种广泛使用的通信机制,它允许不同组件、模块或应用程序间以一种松耦合的方式传递信息。:不同视图控制器、模型对象、服务类等组件间,当一个组件的状态变化需要告知其他组件但它们之间没有直接引用关系时,可以通过通知来解耦。:对特定通知感兴趣的对象通过向通知中心注册,成为该通知的订阅者。方法,传入订阅者对象(self)、要调用的方法(Selector)以及通知的名称和关联对象。方法的观察者对象),当通知中心接收到匹配的通知时,会调用订阅者的回调方法。

u011489056的专栏 1333

STM32无线遥控小车的设计

基于SPI通信的无线摇杆小车的设计

weixin_69414084的博客 2926

保姆级教程:在STM32H750VBT6上跑起来CMSIS-DSP库(基于CubeMX+Keil)

本文详细介绍了在STM32H750VBT6微控制器上配置和运行CMSIS-DSP库的全过程,包括开发环境搭建、CubeMX工程配置、Keil工程设置以及DSP库的实际应用示例。通过FFT频谱分析和音频均衡器等实战案例,展示了如何利用STM32H750VBT6的硬件FPU加速DSP运算,提升实时信号处理性能。

weixin_30236595的博客 455

【iOS】通知的底层原理(实现)

【iOS】通知的底层原理(实现)

cheng_lin0201的博客 1923

K8s(二十一):在 Kubernetes 集群中部署 MySQL8.0 高可用集群(1主2从)

🔴 K8s(二十一):在 Kubernetes 集群中部署 MySQL8.0 高可用集群(1主2从)

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 3万+

ios客户端学习笔记(八):iOS客户端的推送通知

iOS客户端的推送通知是指通过苹果的推送通知服务(APNs)向已安装应用程序的设备发送通知消息。这些通知可以在设备的锁屏屏幕、通知中心和应用程序内展示,以提醒用户有新的消息或事件需要处理。

goodgoodstudy___的博客 1985

文末含资料链接和视频讲解!YOLOv8+RepVGG+QueryDet小目标检测终极指南:从理论到实战,突破遥感图像检测难题

QueryDet(Query Detection)机制代表了目标检测领域的一个重要范式转变。传统的目标检测方法基于anchor或anchor-free的密集预测,需要为图像中的每个可能位置生成预测。而QueryDet采用了稀疏查询的方式,通过少量的可学习查询向量来直接预测目标。 这种设计灵感来源于Transformer架构中的注意力机制。在自然语言处理中,Transformer通过query-key-value机制实现了高效的序列建模。QueryDet将这一思想引入到目标检测中,将检测问题转化为查询匹配问

FJN110的博客 384

Android 12 大屏时底下显示任务栏以及虚拟按键靠右问题

Android 12 点大屏时,底下导航栏变成显示任务栏,虚拟按键靠右的分析以及修改

Android系统开发笔记 4685

【iOS】——通知机制及底层原理

注册通知在同步通知中存储是以name和object为维度的,即判定是不是同一个通知要从name和object区分,如果他们都相同则认为是同一个通知,后面包括查找逻辑、删除逻辑都是以这两个为维度的。通过name和object将通知存储划分为三种结构:named表(name存在)、nameless表(name不存在)、wildcard链表(name和object都不存在)在通知的存储过程并没有做去重操作,这也解释了为什么同一个通知注册多次则响应多次。

m0_73974920的博客 1955

相机图像质量评估标准全解析:MTF、CA、SNR 与色彩偏差的实战理解

图像质量评估是影像系统开发中的核心环节,它直接影响用户视觉体验与终端产品竞争力。本文基于真实的图像调试工程实践,系统讲解主流图像评价指标,包括调制传递函数(MTF)、色差(CA)、信噪比(SNR)与色彩偏差(DeltaE)等关键标准。结合 Imatest 测试流程与实际样张数据,逐项拆解各项指标在实际图像分析中的意义与优化路径,帮助开发者建立完整、量化、工程化的图像质量评估体系。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 2804

iOS 通知机制及底层原理

笔者今天简单学习一下有关于我们这里的一个通知的底层原理的内容。

qq_73106050的博客 1345

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

iOS 通知与消息机制

iOS  通知与消息机制 概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事情。iOS中通知机制又叫消息机制,其包括两类:一类是本地通知;另一类是推送通知,也叫远程通知。两种通知在iOS中的表现一致,可以通过横幅或者弹出提醒两种形式告诉用户,并且点击通知可以会打开应用程序,但是实现原理

PersonSky的博客 1330

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

iOS通知机制

iOS通知机制 1. 定义一个方法 -(void) update{ } 2. 对象注册,并关连消息 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(update) name:@"update" object:nil] 3. 在要发出通知消息的地方 [[NSNotificati...

aaa1231722的博客 123

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

IOS通知机制

简介 通知对象可以携带数据,然后通过通知中心(notification center)进行广播,若想要响应这个通知,接受者需要注册监听这个通知。通知机制的工作原理给我们一个机会,我们可以利用通知机制,达到解藕程序的目的。我们可以把模块的通用功能封装成组件,与业务相关的功能,可以交给组件的使用者实现。组件和组件使用者之间的通信恰好可以使用通知机制来完成。iOS中有三种类型的通知,普通通知,本地通知

静水流深 1044

「iOS」————通知机制底层原理

本文介绍iOS中的通知机制底层原理,很早的时候我们就开始使用通知,但是现在了解了他的底层原理后,加深对其使用的了解

2301_80253909的博客 1120

IOS:通知与消息机制

概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事情。iOS中通知机制又叫消息机制,其包括两类:一类是本地通知;另一类是推送通知,也叫远程通知。两种通知在iOS中的表现一致,可以通过横幅或者弹出提醒两种形式告诉用户,并且点击通知可以会打开应用程序,但是实现原理却完全不同。今天就和大家一块去看一下如何

1740

IOS 通知机制

int main(int argc, const char * argv[]) {     @autoreleasepool {                // 创建一个通知的发布者         NotificationSender *sender1 = [[NotificationSender alloc] init];         

zjl3369的博客 190

IOS通知机制(NSNotification)

要使用通知机制来实现数据的传递,首先需要了解通知中心(NSNotificationCenter) *每一个应用程序都有一个通知中心(NSNotificationCenter)实例,专门负责协助不同对象之间的消息通信 *任何一个对象都可以向通知中心发布通知(NSNotification),描述自己在做什么。其他感兴趣的对象(Observer)可以申请在某个特定通知发布时(或在某个特定

、刘三好的程序旅途 655

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

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

MoonbeamOwl67的博客 1050

《iOS开发笔记—通知机制》

通知机制 iOS中通知机制又叫消息机制,其包括两类:一类是本地通知;另一类是推送通知,也叫远程通知。两种通知在iOS中的表现一致,可以通过横幅或者弹出提醒两种形式告诉用户,并且点击通知可以会打开应用程序,但是实现原理却完全不同。 一、本地通知 本地通知是由本地应用触发的,它是基于时间行为的一种通知形式,例如闹钟定时、待办事项提醒; 又或者一个应用在一段时候后不使用通常会提示用户使用此应用

320

初涉iOS 通知机制

一直对通知机制有所耳闻,但是平时的学习中也没有接触到,最近工作的项目中用到了通知机制,就大概了解了一下。 通知机制一般用在界面之间的传值,以及观察一个事件的发生,并通知通知对象时间发生, 第一步:1,在通知中心添加观察者:  [NSNotificationCenter defaultCenter]addObserver:self           

luodedezhao的博客 302

ios 通知机制

在A页面进行操作,使得B页面有所更改的时候需要用到通知机制,在A页面发送通知,在B页面接收A页面发来的通知从而对B页面进行操作。     首先在viewDidload里注册一个通知监听器 [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(notificationNamerest:)name:...

qq7418675的博客 157

IOS回调机制——代理,通知中心以及Block

Xcode5.0正式版 IOS7和Xcode5正式版在昨天正式可以下载。IOS7不多说了,交互设计,界面风格,操作的简化程度都属于比较领先的水平。 这里来说说Xcode5正式版,和以前的Xcode5测试版来比,正式版改动不大,不过也有稍许变化。 整体来讲,跟Xcode4.6比,属于换了一个时代- -(因为以前的工程换到这里编译需要改很多地方) Xcode5给我的感觉就是:界

RannieR的技术博客 9048
上一篇: ios,使用CocoaPods做第三方库的依赖管理
下一篇: iOS 面试中单例模式的设计
大胖子runner
博客等级 码龄11年 0粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值