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开发过程中,有时候我们需要经常根据设备的一些状态或信息进行不同的设置和性能配置,例如横竖屏切换时,电池电量低时,内存不够时,网络切换时等等,我们在这时候需要进行一些 ...
随机推荐
- 【漫画】程序员永远修不好的Bug——情人节
盼望着,盼望着,周五来了 情人节的脚步近了 一切都像热恋时的样子 飘飘然放开了买 购物车满起来了…… 不要指望着能在女生面前蒙混过关 是时候展现真正的技术了 这道坎过去了是情人节 过不去就是清明节了 ...
- 20170506计划-----(基于python查询oracle语句)
在日常的工作中,经常接到开发同事查询生产SQL的请求,公司又不允许对开发开放查询SQL的权限,并且查询的堡垒机又很慢,计划做一个可以自动查询SQL的小工具,一周内完成吧. 大概功能实现了,一些涉及敏感 ...
- core的微服务相关
网关是ocelot consul 服务发现 配置中心apollo
- Spring 缓存注解之@Cacheable,@CacheEvit
Spring引入了Cache的支持,其使用方法类似于Spring对事务的支持.Spring Cache是作用于方法上的,其核心思想是,当我们调用一个缓存方法时,把该方法参数和返回结果作为一个键值对存放 ...
- PHP常用180函数总结【初学者必看】
数学函数 1.abs(): 求绝对值 <span style="font-size: 14px;">$abs = abs(-4.2); //4.2<br>& ...
- 通过java读取excle数据的方法,今天用到了留下来供以后参考使用
近期项目属于一个棋牌类项目 用到的配置表比较多 所以在这里 贴一下代码,留下来可以参考.也希望对有需要的朋友有所帮助哦 >1.需求将一个excle表格中的数据 读取 然后封装成自定义的对象,本项 ...
- Linux下mysql定时自动备份并FTP到远程脚本
1.添加backupmysqleveryday.sh(vi /data/shell/backupmysqleveryday.sh) #!/bin/sh #this shell is user for ...
- (PMP)解题技巧和典型题目分析(0903-2班)
1.计算题 ,5 2.概念题,少 3.情景题,很多 C B C D ------------------------------------------------------------------ ...
- USB设备类学习笔记
usb audio class 版本目前有3个版本 分别是1.0,2.0,3.0:1.0针对各个厂家的设备具有不同的描述符,而2.0则将它们统一简化,3.0则是最新的,还没有与2.0作进一步比较:因 ...
- 在ExtJS中查看视频
listeners: { render: function() { win.update( '<video src="' + path+ '" width="100 ...