iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >iOS NSNotificationCenter通知中心使用小结
  • 567
分享到

iOS NSNotificationCenter通知中心使用小结

iOSNSNotificationCenter 2022-05-18 15:05:50 567人浏览 独家记忆
摘要

前言 最近公司组织两个星期的新人培训,事情安排的满满的,周末都没有。说好的一个星期一更新的博客中断了,让大家久等了,现在培训结束,终于又可以安安静静的做一个程序员了,好开心。。。 一

前言

最近公司组织两个星期的新人培训,事情安排的满满的,周末都没有。说好的一个星期一更新的博客中断了,让大家久等了,现在培训结束,终于又可以安安静静的做一个程序员了,好开心。。。

一、NSNotification和Delegate的联系和区别

众所周知,iOS中经常会使用到NSNotification和delegate来进行一些类之间的消息传递。言归正传,这两种有什么区别呢? NSNotification就是IOS提供的一个消息中心,由一个全局的defaultNotification管理应用中的消息机制。通过公开的api可以看出,这里面使用了是一个观察者,通过注册addObserver和解除注册removeObserver来实现消息传递。苹果文档特别提出,在类析构的时候,要记得把removeObserver,不然就会引发崩溃,所以NSNotifcation的使用是没有retain+1的,NSNotification是一对多的。

至于Delegate,很简单,就是通过增加一个指针,然后把需要调用的函数通过delegate传递到其他类中,来得很直截了当。不需要通过广播的形式去实现,但是,delegate的形式只能是一对一,不能实现一对多。

在什么情况下使用Delegate和NSNotifiation呢?

从效率上看Delegate是一个很轻量级的,相对delegate,NSNotification却是一个很重量级的,效率上delegate明显要比Noticication高。一般情况我们会这样使用。

场景一:

A拥有B,然后B中的一些操作需要回调到A中,这时候就简单的通过delegate回调到A。因为B是A创建的,B可以很直接的把delegate赋值A。

场景二:

A和B是两个不相干的关系,A不知道B,B也不知道A,那么这时候如果通过delegate就没办法做到,会相对复杂。所以可以通过NSNotifcation去做一些消息传递。

所以使用delegate的情况是两者有直接的关系,至于一方知道另一方的存在。而NSNotifcation一般是大家不知道对方的存在,一般是使用跨模块的时候使用。在使用的时候,使用delegate可能需要多写一些delegate去实现,代码量比较多。NSNotication只要定义相关的NotificationName就可以很方便的沟通。两者各有所长。

二、监听系统自带的NSNotification

系统里定义了许多的 XxxNotification 名称,其实只要 Cmd+Shift+O 打开 Open Quickly,输入 NSNotification 或者 UINotification 可以看到许多以 Notification 结尾的变量定义,由变量名称也能理解在什么时候会激发什么事件,一般都是向 [NSNotificationCenter defaultCenter] 通知的。

使用步骤

注册系统监听事件


 //在NSNotificationCenter中注册键盘弹出事件
  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardUpEvent:) name:UIKeyboardDidShowNotification object:nil];
  //在NSNotificationCenter中注册键盘隐藏事件
  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDownEvent:) name:UIKeyboardDidHideNotification object:nil];
  //在NSNotificationCenter中注册程序从后台唤醒事件
  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(becomeActive:) name:UIApplicationDidBecomeActiveNotification object:nil];

事件触发后的处理



-(void)keyboardUpEvent : (NSNotification *)notification{
  //NSLog(@"键盘弹出事件触发==%@",notification);
  NSLog(@"键盘弹出事件触发");
}


-(void)keyboardDownEvent : (NSNotification *)notification{
  //NSLog(@"键盘隐藏事件触发==%@",notification);
  NSLog(@"键盘隐藏事件触发");
}


-(void)becomeActive: (NSNotification *)notification{
  NSLog(@"程序从后台唤醒触发处理");
}

第三步、在dealloc中解除监听



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

三、自定义NSNotification

这里我使用的一个实例为:在ViewController中定义一个按钮,点击该按钮,同时改变两个自定义View中的内容。

使用步骤

第一步、在ViewController中生成一个按钮,两个自定义View


 UIButton *postMsgBtn = [[UIButton alloc] initWithFrame:CGRectMake(50, 200, 100, 40)];
  [postMsgBtn setTitle:@"发送消息" forState:UIControlStateNORMal];
  postMsgBtn.backgroundColor = [UIColor grayColor];
  [postMsgBtn addTarget:self action:@selector(postMsg:) forControlEvents:UIControlEventTouchUpInside];
  [self.view addSubview:postMsgBtn];

  MyView *view = [[MyView alloc] initWithFrame:CGRectMake(50, 250, 100, 50)];
  [self.view addSubview:view];

  MyView *view2 = [[MyView alloc] initWithFrame:CGRectMake(50, 320, 100, 50)];
  [self.view addSubview:view2];

第二步、点击按钮,发送Notification


-(void)postMsg: (UIButton *)btn{
  [[NSNotificationCenter defaultCenter] postNotificationName:NOTIFICATION_MESSAGE_NAME object:nil userInfo:@{@"msg":@"jingming1"}];
}

第三步、在自定义View中注册监听事件

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(acceptMsg:) name:NOTIFICATION_MESSAGE_NAME object:nil];

第四步、处理监听事件


-(void)acceptMsg : (NSNotification *)notification{
  NSLog(@"%@",notification);
  NSDictionary *userInfo = notification.userInfo;
  _label.text = [userInfo objectForKey:@"msg"];
}

第五步、在dealloc中解除监听


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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: iOS NSNotificationCenter通知中心使用小结

本文链接: https://www.lsjlt.com/news/30255.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Win10预览版14328中心中应用下载通知
    在Win10 Mobile Build 14327版本中,微软开始让之前wp8.1的一些功能回归,比如商店应用下载通知。微软今天推送了Windows10 PC一周年更新预览版14328,全新改进的通知中心,也加入了商店应...
    99+
    2023-05-20
    Win10 预览版14328
  • python中的信号通信 blinker的使用小结
    目录信号:官方介绍:blinker 使用命名信号匿名信号组播信号接收方订阅主题装饰器用法可订阅主题的装饰器检查信号是否有接收者检查订阅者是否订阅了某个信号基于blinker的Flas...
    99+
    2024-04-02
  • Win10安装破解补丁重新启用通知中心
      Win10体验版中少了一个重要的功能,那就是通知中心。想要重新启用Win10通知中心,就要安装补丁。本文就来介绍一下Win10安装破解补丁并启用通知中心的方法。   如果你的系统是Windows 10,你可以文章末...
    99+
    2023-06-16
    Win10 破解补丁 通知中心 通知 中心
  • C++中引用的相关知识点小结
    目录引用的概念引用特性常引用使用场景引用和指针的区别总结引用的概念 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块...
    99+
    2024-04-02
  • SpringBoot中Dozer的使用小结
    什么是Dozer? Dozer是一种Java Bean到Java Bean的映射器,递归地将数据从一个对象复制到另一个对象,它是一个强大的,通用的,灵活的,可重用的和可配置的开源映射...
    99+
    2024-04-02
  • 微信小程序动态设置标题 IOS、安卓通用(直接使用)
    默认标题--在json文件中写  2.动态设置标题    2-1:固定写:        使用方法:直接把这段代码放在onLoad里面 即表示--界面记载时候就执行所设置的title         wx.setNavigationBar...
    99+
    2023-09-12
    微信小程序 小程序 前端
  • MySQL中超级有用的14个小知识总结
    目录1.group_concat2.char_length3.locate4.replace5.now6.insert into ... select7.insert into ... ignore8.sele...
    99+
    2022-12-21
    mysql小知识点 mysql基本知识点 mysql知识点总结
  • iOS控制中心的使用指南:同时使用iPhone的“请勿打扰”功能
    当您想减少通知时,Apple的“请勿打扰”功能非常有用,本指南将向您展示如何在iPhone上的控制中心中快速轻松地访问此功能。在当今的数字时代,我们的智能手机和平板电脑已成为我们生活中不可或缺的一部分。他们让我们保持联系、了解情况和娱乐。但...
    99+
    2023-08-03
  • python中itertools模块使用小结
    Python 内置的 itertools 模块包含了一系列用来产生不同类型迭代器的函数或类,这些函数的返回都是一个迭代器,我们可以通过 for 循环来遍历取值,也可以使用 next(...
    99+
    2024-04-02
  • Win10系统新通知中心的打开方法和作用介绍
      这次微软在Win10系统上对通知中心进行了大量新功能的开发,强化了Win10通知中心的作用。最新的Win10版本的通知中心与此前预览版又有变化。下面我们来看看看它的打开方法和作用。   一、Win10通知中心的打开...
    99+
    2023-06-11
    Win10 通知中心 中心 打开 通知 方法 系统
  • JS中的reduce()方法使用小结
    目录一、语法二、实例三、其他相关方法过去有很长一段时间,我一直很难理解 reduce() 这个方法的具体用法,平时也很少用到它。事实上,如果你能真正了解它的话,其实在很多地方我们都可...
    99+
    2024-04-02
  • drools中使用function的方法小结
    目录一、背景二、需求三、前置知识1、function语法结构2、drl文件中如何调用java的静态方法四、实现1、项目结构2、引入drools依赖3、编写kmodule.xml文件4...
    99+
    2024-04-02
  • 浅谈Laravel中使用Slack进行异常通知
    目录概述安装 maknz/slack-laravel 包配置调整 AppExceptionsHandler 类的 report 方法概述 通常,我们可以依靠用户反馈、经常查看程序日志...
    99+
    2024-04-02
  • Mock.js在Vue项目中的使用小结
    目录写在前面Mock.js 初体验Mock.js语法规范1.数据模板定义规范2.数据占位符定义规范3.一个实际开发中会用到的案例:生成个人信息Mock.js在Vue中的使用1.定义接...
    99+
    2024-04-02
  • Redis中 HyperLogLog数据类型使用小结
    目录1. HyperlogLog 的原理2.使用步骤:3.实现请求ip去重的浏览量使用示例4.Jedis客户端使用5.Redission使用依赖6.HyperLogLog 提供了哪些特性和方法7.使用场景总结:1. Hy...
    99+
    2023-03-13
    Redis HyperLogLog数据类型使用 Redis HyperLogLog数据类型
  • C# 中SqlParameter类的使用方法小结
    在C#中,SqlParameter类用于表示SQL命令中的参数。以下是SqlParameter类的使用方法的小结:1. 创建SqlP...
    99+
    2023-09-08
    C#
  • 详解JavaEE中Apollo安装使用小结
    目录一、安装MySQL 5.7.37(主机:192.168.233.128,用户/密码:root):二、Apollo安装/启动(centos7)(主机:192.168.233.128...
    99+
    2024-04-02
  • Vue3中的h函数及使用小结
    目录简介简单使用参数使用进阶使用函数组件插槽参考资料:专栏目录请点击 简介 众所周知,vue内部构建的其实是虚拟DOM,而虚拟DOM是由虚拟节点生成的,实质上虚拟节点也就是一个js对...
    99+
    2023-03-06
    Vue3 h函数 Vue3 h函数用法
  • Java多线程中Lock的使用小结
    Jdk1.5 以后,在 java.util.concurrent.locks 包下,有一组实现线程同步的接口和类,说到线程的同步,可能大家都会想到 synchronized 关键字,...
    99+
    2023-05-18
    Java多线程Lock Java Lock
  • Laravel中如何使用Slack进行异常通知
    小编给大家分享一下Laravel中如何使用Slack进行异常通知,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!概述通常,我们可以依靠用户反馈、经常查看程序日志来发...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作