iOS 关于NSNotificationCenter

2023-11-14

通常我们在 iOS 中发生什么事件时该做什么是由 Delegate 实现的,  Apple 还为我们提供了另一种通知响应方式,那就是 NSNotification.

NSNotificationCenter 较之于 Delegate 可以实现更大的跨度的通信机制,可以为两个无引用关系的两个对象进行通信。NSNotificationCenter 的通信原理使用了观察者模式(KVO):三步骤  1在需要实施的地方注册  2并 写好触发的事件  3在需要触发该事件的地方激发

1. NSNotificationCenter 注册观察者对某个事件(以字符串命名)感兴趣,及该事件触发时该执行的 Selector 或 Block
2. NSNotificationCenter 在某个时机激发事件(以字符串命名)
3. 观察者在收到感兴趣的事件时,执行相应的 Selector 或 Block
4. 注销观察者 这个对应注册 一般在selector方法里 ,也相对于注册的时机 一般是 viewWillappear 注册 viewWillDisapper 注销
//
//  SecondViewController.m
//  StoryBoard
//
//  Created by HF on 15/1/12.
//  Copyright (c) 2015年 YLYL. All rights reserved.
//

#import "SecondViewController.h"
#import "BasicFunctuin.h"
@interface SecondViewController ()

@end

@implementation SecondViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    //注册通知 通知实施方法是update  激活关键字是 @"update"
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(update) name:@"update" object:nil];
}
//触发方法
-(void) update { DLog(@"KVO");

     //观察者注销,移除消息观察者

      [[NSNotificationCenter defaultCenter]removeObserver:self name:@"update" object:nil];

}
@end
//
//  FirstViewController.m
//  StoryBoard
//
//  Created by wzyb on 14-12-11.
//  Copyright (c) 2014年 YLYL. All rights reserved.
//
#import "FirstViewController.h"
@interface FirstViewController ()

@end

@implementation FirstViewController

- (void)viewDidLoad {
    [super viewDidLoad];
}
 
-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:YES];
//实施通知 在此时触发关键字@"update" 的通知方法 只要是该关键字 方法都执行 [[NSNotificationCenter defaultCenter] postNotificationName:
@"update" object:nil]; } @end
虽然在 IOS 用上 ARC 后,不显示移除 NSNotification Observer 也不会出错,但是这是一个很不好的习惯,不利于性能和内存。

  移除通知:removeObserver:和removeObserver:name:object:其中,removeObserver:是删除通知中心保存的调度表一个观察者的所有入口,而removeObserver:name:object:   是删除匹配了通知中心保存的调度表中观察者的一个入口。

这个比较简单,直接调用该方法就行。例如:

 
  

[[NSNotificationCenter defaultCenter] removeObserver:observer name:nil object:self];

 
  

注意参数notificationObserver为要删除的观察者,一定不能置为nil。


注销观察者有2个方法:

a. 最优的方法,在 UIViewController.m 中:

-(void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
现在arc中一般post b. 单个移除: [[NSNotificationCenter defaultCenter] removeObserver:self name:
@"Notification_GetUserProfileSuccess" object:nil];

 

转载于:https://www.cnblogs.com/someonelikeyou/p/4222352.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS 关于NSNotificationCenter 的相关文章

  • pip install -r requirements.txt出现错误时........

    只需要把pip install r requirements txt后加入替换网址即可 安装需要的库的时候建议使用清华源 这样更快 使用下面的指令就可以使用清华源下载了 pip install r requirements txt i ht
  • Django 快速搭建博客 第三节(数据库表设计)

    上一节我们已经能在pycharm下新建了blog app了 这个时候 我们需要设计一下博客的数据库设计 关于数据库表的设计 作为新手的我们并不需要要求懂太多稍微的懂一些也就可以了 毕竟数据库也是需要有一定的功底的 这里我们依据博客学习 将博
  • 多线程操作同一个变量

    在java线程并发处理中 有一个关键字volatile的使用目前存在很大的混淆 以为使用这个关键字 在进行多线程并发处理的时候就可以万事大吉 Java语言是支持多线程的 为了解决线程并发的问题 在语言内部引入了 同步块 和 volatile
  • Python算法工程师:心中无码便是高清,马赛克“脑补”算法 PULSE

    1 万恶马赛克 万恶的马赛克 是阻碍人类进步的绊脚石 马赛克 脑补 算法 PULSE 助你图片模糊变高清 这是杜克大学近期的一项研究 将模糊人脸秒变高清 PULSE 算法目前只支持人脸的马赛克 去除 因为训练数据都是人脸 也就是说 脑补 其
  • 华为X系列服务器,华为X系列高密服务器产品介绍.pptx

    华为X系列高密服务器产品介绍 目标 华为高密服务器总览X6000服务器介绍X8000服务器介绍 计算面临的挑战 云计算 IT面临的挑战 华为服务器家族 华为高密服务器总览X6000服务器介绍X6000服务器简介X6000服务器硬件结构X60
  • MySQL 视图(详解)

    文章目录 一 视图概念 使用视图的原因 二 创建视图 1 基本语法 2 创建基于单表的视图 实例 1 实例 2 3 创建基于多表的视图 实例 3 4 查询视图 实例 4 三 查看视图 1 查询表 包括view 2 查询视图 四 修改视图 1
  • 【Node】使用Node.js连接数据库时报错客户端不支持服务器请求的身份验证协议

    使用Node js连接数据库时报错 Error ER NOT SUPPORTED AUTH MODE Client does not support authentication protocol requested by server c
  • 嗯… 无法访问此页面 www.bing.com 花了太长时间进行响应解决办法

    从昨天开始 Microsoft Edge浏览器在搜索栏输入中文后就无法响应 但是网络连接是好的 防火墙也没有设置过 问题见下图 点击运行Windows网络诊断 如下图 检测完成后 只是说你的计算机配置似乎是正确的 但该设备或资源 www b
  • 微信小程序animation动画,微信小程序animation动画无限循环播放

    需求是酱紫的 页面顶部的喇叭通知 内容不固定 宽度不固定 就是做走马灯 轮播 效果 从左到右的走马灯 轮播 每播放一遍暂停 1500ms 2000ms 刚开始想的是 css 的 position relative animation 如果宽
  • 自定义一个VideoCapturer(WebRTC)用于获取大疆无人机实时视频

    WebRTC做大疆无人机直播 大疆带屏遥控器有直播功能 用的是rtmp 但是延时有点大 所以在遥控器里安装自己的软件 用webrtc来做一个无人机视频实时传输 需要自定义一个VideoCapturer来获取无人机视频封装成便于webrtc使
  • Spring AOP 剖析(5)

    在动态代理 和 CGLIB 的支持下 Spring AOP 框架的实现经过了两代 从 Spring AOP 框架第一次发布 到 Spring 2 0 发布之前的 AOP 实现 是 Spring 第一代 AOP 实现 Spring 2 0 发
  • vue项目中修改页面logo和标题

    第一步 把图片转成icon格式 比特虫转换工具 建议尺寸为16 16 第二步 将图标重命名为 favicon ico 并放在项目根目录下 第三步 然后在index html中引入 title中修改页面标题 第四部 分别修改build文件夹下
  • 5. spark 参数问题

    如何传递spark 参数 在代码中设置参数 命令行 Spark Properties 动态加载参数 官网地址 spark 参数 在代码中设置参数 spark default conf lt 命令行 lt 代码内部设置参数 对于一常用的参数可
  • python 图像处理中PIL中image.convert()函数使用

    from PIL import Image img Image open E image myimg jpg result img convert P palette Image ADAPTIVE colors 10 3 模式 P 模式 P
  • 计算机图形学 3D 渲染 笔记(二)

    一 阴影 判断一个点是否被遮住 可以从该点像光源方向发射射线 P tL 若射线被与物体发生相交 则说明它在阴影中 而这个物体由于要在 P 和 光源之间 在方向光场景下 t 的取值范围是 0 lt t lt 因为光源无限远 而在点光下 t 的
  • 经济学人:重塑世界的区块链技术

    比特币背后的技术可让彼此互不认识的人建立可依赖的账簿 这远远超出了加密数字货币本身的意义 Mariana Catalina Izaguirre女士在她简陋的房子已经居住了三十年 但洪都拉斯的警察在2009年突然要将她赶走 不同于她在特古西加
  • Frida hook零基础教程

    1 环境搭建 1 准备frida服务端环境 Releases frida frida GitHub 根据手机具体版本下载对应文件并解压 Android手机一般是arm64架构 将解压后的frida server推送到手机端的 data lo
  • rocketmq客户端配置

    1 客户端配置 相对于RocketMQ的Broker集群 生产者和消费者都是客户端 2 客户端寻址方式 RocketMQ可以令客户端找到Name Server 然后通过Name Server再找到Broker 如下所示有多种配置方式 优先级
  • 智慧农业物联网系统 智慧农业解决方案

    智慧农业是智慧经济发展在农牧业上的运用反映 伴随着5G无线通信技术 互联网大数据信息资源管理技术性等现代化技术性普及化 物联网的实际运用标准逐渐完善 传统农业便熟练掌握物联网 摇身一变变成智能农业 智慧农业应用农业地区的每个传感器连接点检测
  • linux间文件实时同步(syncthing) ---带历史版本“后悔药”

    一 概念简介 syncthing 一款开源免费的数据同步工具 基于P2P的跨平台文件同步工具 通过tcp建立设备连接 再通过TLS进行数据安全传输 支持公网与局域网搭建 支持单双向同步与历史版本控制 后悔药 备份机未感染情况下 历史版本理论

随机推荐

  • 关于我“不小心”打开我姐浏览器这件事儿

    今天早上手机骤然没电 我犹如一只情急之下的小松鼠 抓紧时间把手机送回家中的充电宝岛 房间 接着 为了方便处理业务 扮演特别行动队员的角色 借来了姐姐的手机 结果可嚣张了 浏览器记录里居然有这么多 精彩 内容 哎呀 姐姐啊 你这是干啥呢 怎么
  • layui弹窗间的传值(layui弹出层传值)(窗口传值)

    layui弹窗间的传值 layui弹出层传值 窗口传值 LayUI父窗口向弹出层传递数据可以解决页面中的编辑数据的操作 点击编辑按钮 父窗口传递当前选中行当数据至弹出层 弹出层获取到父窗口传递的数据 接着在弹出层中展示出来 效果如下 具体步
  • 数据结构和算法(C)------4.线性表(2)单链表

    目录 1 链式存储结构 1 1 定义 1 2 实现方式 1 3 与链式存储有关的术语 1 4 链表 链式存储结构 的特点和优缺点 1 4 1 特点 1 4 2 优点 1 4 3 缺点 2 单链表的实现 2 1 单链表的存储结构定义 2 2
  • ImportError: cannot import name 'ndcg_score' from 'sklearn.metrics'

    用sklearn metrics调用ndcg score 出现找不到模块的情况 从网上找了资料都说是sklearn版本问题 查看了一下版本是0 20 3 然后就去更新sklearn pip install upgrade scikit le
  • 2021CCPC河南省赛题解(主席树+二分)

    考场没看见随机化数据 写了一个主席树 二分 但是之前练习的时候没有做过多实例 忘记初始化上层用到的所有节点信息了 wa麻了 思路 主席树 二分 O nlogn 2 二分距离当前点最近的 大于等于a i 的数的个数最靠右的位置 然后利用主席树
  • 尚硅谷Redis 7学习笔记

    尚硅谷Redis 7学习笔记 视频链接 新手入门篇 1 安装及数据类型 2 持久化 3 Redis 7 事务 管道 发布订阅 主从 哨兵 集群 4 springboot整合redis 高级篇 更新中
  • 稳压二极管原理及使用

    要理解稳压二极管的工作原理 只要了解二极管的反向特性就行了 所有的晶体二极管 其基本特性是单向导通 就是说 正向加压导通 反向加压不通 这里有个条件就是反向加压不超过管子的反向耐压值 那么超过耐压值后是什么结果呢 一个简单的答案就是管子烧毁
  • 【Python】之 os.path 模块详解

    前言 os path 模块是系统路径操作模块 但实际的原理可以把它认为是处理包含斜杠 和反斜杠 字符串的模块 其中 斜杠 是 linux 系统下的路径分隔符 和反斜杠 是 windows 系统下的路径分隔符 也就是说 只要提供一个包含斜杠和
  • 论文阅读笔记:Attention is All You Need

    论文标题 Attention is All You Need 目录 论文标题 Attention is All You Need 1 摘要 2 前言 3 模型结构 自注意力机制 多头自注意力机制 注意力机制在Transformer中的应用
  • shell脚本不能激活环境变量问题完美解决

    今天在Linux系统写shell脚本时发现配置好java环境变量后 明明写了source etc profile 但还是不能激活 也就是java version没有反应 非要自己手动去激活 后来发现我是用 test sh 来启动的脚本 te
  • RPA技术分享--通过解压 OFD 获取发票信息

    了解RPA www i search com cn 学习RPA https support i search com cn 下载RPA https www i search com cn from csdn 实际上 ofd docx xls
  • sql实现截取字段内容

    场景 出现一批数据需要修复 调用方法进行传参 而存储该字段内容是JSONString呈现 所需的仅仅是其中的某一部分数据 因此需要完成截取 并拼接成想要的格式 使用如下格式调用postman实现自动化执行接口调用 例如 taskId xxx
  • 用GCC生成和调用dll【C语言版】

    今天在网上找了好久 才找到这个能成功运行的视频教程 现在分享给大家 Windows下C语言使用GCC编写和调用dll https www bilibili com video BV1E4411z7Ua share source copy w
  • 颜色识别的实例二

    原图 识别结果 代码 color fuses hdev classify fuses by color dev update window off step set up fuse properties and hue ranges Fus
  • iwebsec靶场 SQL注入漏洞通关笔记6- 宽字节注入

    系列文章目录 iwebsec靶场 SQL注入漏洞通关笔记1 数字型注入 mooyuan的博客 CSDN博客 iwebsec靶场 SQL注入漏洞通关笔记2 字符型注入 宽字节注入 mooyuan的博客 CSDN博客 iwebsec靶场 SQL
  • (十七)QT生成PDF文件

    在实际情况中 我们有时候会遇到需要把txt html或者图片变成PDF文件的情况 例如把检测结果生成PDF文档给客户等等 QT4使用QPrinter来实现这个功能 QT5修改为QPdfWriter这个类 一 QT5的修改 如果你想在QT5中
  • 思岚RPLIDAR A2 在ubuntu 16.04上的测试

    1 下载雷达ROS包 首先在github上下载rplidar的ros包 下载指令为 默认安装了git git clone https github com Slamtec rplidar ros git 在ubuntu上创建工作空间 并将该
  • 落地领域大模型应知必会(2): 轻量化微调

    编者按 在实际部署大模型的过程中可能会面临资源限制的问题 通过轻量化大模型微调技术 可以将大型预训练语言模型适配到特定领域 特定任务 并减小其模型尺寸和计算量需求 提高性能和效率 在上一篇文章中 我们分享了大语言模型的主要微调技术总览 接下
  • 实验6-6 使用函数验证哥德巴赫猜想 (20分)

    http pta patest cn pta test 13 exam 3 question 478 include
  • iOS 关于NSNotificationCenter

    通常我们在 iOS 中发生什么事件时该做什么是由 Delegate 实现的 Apple 还为我们提供了另一种通知响应方式 那就是 NSNotification NSNotificationCenter 较之于 Delegate 可以实现更大