iOS学习——(转)iOS中关于通知的使用
在移动端开打过程中,经常会用到通知和推送,例如有短信来了需要通知提示,手机横屏了需要通知提示,插上耳机了需要通知提示等等,我们可以根据这些通知采取对应的动作。iOS系统自身定义了很对通知,但是在开发过程中我们也可以进行自定义一些通知,然后利用NSNotificationCenter在需要的时候进行发送通知,在接收到通知时采取对应的动作。
通知的学习其实很简单,首先我们需要注册通知,这样才能接收到对应类型的通知,并定义接收到通知时所采取的动作;其次就是我们需要学会在何时发送通知,当然,对于iOS系统定义的通知的发送是自发的,不需要我们进行发送,当然我们也可以用这种方法进行模拟发送系统定义的通知;最后我们需要了解的就是如何移除通知。
在开始之前,我们首先了解一下系统定义了那些通知,官网的定义如下:NSNotificationName。大家有需要可以自行查看,由于太多,所以建议大家在需要用到通知类的时候直接找度娘问有没有对应的通知类名,有则去官网找对应的解释和说明,没有则进行自定义。
下面的内容主要来源于文章:iOS创建添加通知、发送通知、移除通知。
1 创建通知
关于创建通知,最好是在viewDidLoad的方法中创建
- (void)viewDidLoad {
[super viewDidLoad];
//创建通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tongzhi:) name:@"tongzhi" object:nil];
}
//接收通知并相应的方法
- (void) tongzhi:(NSNotification *)notification{
NSDictionary *dic = notification.object;
// NSLog(@"通知过来的 - dic = %@",notification.object);
}
2 发送通知
//配置发送的通知携带的参数
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"",@"bankId",@"某某银行",@"bankName", nil];
//通过通知中心发送通知
[[NSNotificationCenter defaultCenter] postNotificationName:@"tongzhi" object:dic];
3 移除通知
根据谁创建,谁负责的原则,一般是创建通知的那个控制器来移除通知,最好在dealloc方法中移除,如果通知不能及时的移除掉,当下次进入该控制器时会重复创建NSNotificationCenter,在对应方法中发送通知给上一次创建的通知,但是上一个通知所在的控制器已被干掉,所以这时候就会报错。
-(void)dealloc{
//第一种方法.这里可以移除该控制器下的所有通知
// 移除当前所有通知
NSLog(@"移除了所有的通知");
[[NSNotificationCenter defaultCenter] removeObserver:self];
//第二种方法.这里可以移除该控制器下名称为tongzhi的通知
//移除名称为tongzhi的那个通知
NSLog(@"移除了名称为tongzhi的通知");
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"tongzhi" object:nil];
}
注意:如果dealloc方法不调用,说明当前有变量没有被释放,这时如果找不到问题所在,也可以重写控制器的返回按钮backBarButtonItem事件,在返回的时候进行移除通知操作。此外,如果dealloc不调用,说明存在内存泄漏,这个问题是必须要解决的,在iOS开发过程中,对内存泄漏的管理是非常严格的,我们务必做好这方面的工作,具体关于内存泄漏问题的注意事项和查找方法可以参见我之前的一篇随笔:iOS学习——内存泄漏检查及原因分析
//返回上一层界面事件
-(void)backPreviousViewControllerAction{ //第一种方法.这里可以移除该控制器下的所有通知
// 移除当前所有通知
NSLog(@"移除了所有的通知");
[[NSNotificationCenter defaultCenter] removeObserver:self]; //第二种方法.这里可以移除该控制器下名称为tongzhi的通知
//移除名称为tongzhi的那个通知
NSLog(@"移除了名称为tongzhi的通知");
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"tongzhi" object:nil]; // 返回上一层界面
[self.navigationController popViewControllerAnimated:YES]; }
iOS学习——(转)iOS中关于通知的使用的更多相关文章
- IOS学习:ios中的数据持久化初级(文件、xml、json、sqlite、CoreData)
IOS学习:ios中的数据持久化初级(文件.xml.json.sqlite.CoreData) 分类: ios开发学习2013-05-30 10:03 2316人阅读 评论(2) 收藏 举报 iOSX ...
- IOS学习之IOS沙盒(sandbox)机制和文件操作
IOS学习之IOS沙盒(sandbox)机制和文件操作(一) 1.IOS沙盒机制 IOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都 ...
- iOS学习之iOS沙盒(sandbox)机制和文件操作1
iOS学习之iOS沙盒(sandbox)机制和文件操作 接上篇 iOS学习之iOS沙盒(sandbox)机制和文件操作(一) 我们看看如何获取应用程序沙盒目录.包括真机的沙盒的目录. 1.获取程序的H ...
- iOS学习之UITableView中Cell的操作
接着iOS学习之Table View的简单使用 这篇,这里主要讲UITableView 中的Cell的操作,包括标记.移动.删除.插入. 为了简单快捷,直接从原来那篇的代码开始,代码下载地址:http ...
- 【转】iOS学习之Storyboard中的UIScrollView使用自动布局
在使用storyboard和xib时,我们经常要用到ScrollView,还有自动布局AutoLayout,但是ScrollView和AutoLayout 结合使用,相对来说有点复杂.根据实践,我说一 ...
- IOS学习[Swift中跳转与传值]
Swift中页面跳转与传值: 1.简单方式 首先,Swift的跳转可分为利用xib文件跳转与storyboard跳转两种方法,我这里选择使用storyboard的界面跳转方法. 1.通过在storyb ...
- iOS 学习 - 6.Objective-C中的各种遍历(迭代)方式
说明:转自文顶顶 一.使用 for 循环 要遍历字典.数组或者是集合,for 循环是最简单也用的比较多的方法 -(void)iteratorWithFor { //////////处理数组////// ...
- ios学习:swift中实现分享到微博、facebook,twitter等
在swift中打开分享功能原来是如此的简单. 1.首先须要 import Social 2.在分享button事件以下 var controller:SLComposeViewController = ...
- iOS学习(项目中遇到的错误1)
1.[AppModel copyWithZone:]: unrecognized selector sent to instance 0x7ffda9f4cf70 *** Terminating ap ...
- iOS学习——获取iOS设备的各种信息
不管是在Android开发还是iOS开发过程中,有时候我们需要经常根据设备的一些状态或信息进行不同的设置和性能配置,例如横竖屏切换时,电池电量低时,内存不够时,网络切换时等等,我们在这时候需要进行一些 ...
随机推荐
- memcache集群
实现memcache集群 一:memcache本身没有redis锁具备的数据持久化功能,比如RDB和AOF都没有,但是可以通过做集群的方式,让各memcache的数据进行同步,实现数据的一致性,即 ...
- Filter的介绍及使用
转:http://blog.csdn.net/zhaozheng7758/article/details/6105749 一.Filter的介绍及使用 什么是过滤器? 与Servlet相似,过滤器是一 ...
- py3.0第四天 函数,生成器迭代器等
1.列表生成式,迭代器&生成器 孩子,我现在有个需求,看列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],我要求你把列表里的每个值加1,你怎么实现?你可能会想到2种方式 > ...
- 计算机爱好者协会技术贴markdown第三期
之前都是给大家展示的对文本的基本操作,这一期我们要给大家展示的就是很高大上的东西了哦 看左边是不是超low,右边是不是瞬间高大上了!!! 一个简单的表格是这么创建的: 爱酱 | Value - ...
- k8s1.13.3安装istio(helm方式)
官方文档:https://istio.io/zh/docs/setup/kubernetes/install/helm/ 一.环境信息 centos7 k8s1.13.3 主机名 ip cpu ram ...
- 第44章:MongoDB-集群--Sharding(分片)--分片的片键选择
①片键选择的重要性 所谓片键,就是用来拆分数据的字段,通常为1-2个字段,由于片键一旦确定,并已经分片过后,基本上就不可能再修改片键了,因此初期设计和选择就非常重要了 ②片键规则 1:不可以是数组 2 ...
- servlet概述(作业11)
1.什么是servlet. Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能 ...
- Exp3 免杀原理与实践 20154320 李超
基础知识 如何检测出恶意代码 基于特征码的检测:分析指令的统计特性.代码的结构特性等.如果一个可执行文件(或其他运行的库.脚本等)拥有一般恶意代码所通有的特征(开启后门等)则被认为是恶意代码 启发式恶 ...
- 与我们息息相关的internet服务(2)---WWW服务
在起步一个公司,从组建的技术上,可能要准备很多东西,其中一个就是我们熟悉的公司网站 网站,在初中,那时浏览一个网页可叫网上冲浪,听起来似乎比洗澡还爽快,可现在这词就是土鳖,网上冲浪火起来主要是应 ...
- 关于n维和n-1维欧式空间
我们从小就说,"点动成线,线动成面,面动成体",其中的空间的概念到底是啥?之前没有好好想过,在机器学习中多次遇到"空间"."超平面",&qu ...