iOS---NSNotification使用解析

原创 2016年08月30日 14:53:40

一、使用步骤
使用NSNotification很简单, 只要三步
1、添加观察者 在需要的地方注册要观察的通知

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(update:) name:@"userName" object:nil];

2、发送通知 在某地方发送通知

NSDictionary *dict =[[NSDictionary alloc] initWithObjectsAndKeys:self.userNameTextField.text, @"userNameKey", nil];
[[NSNotificationCenter defaultCenter] postNotificationName:@"userName" object:self userInfo:dict];

3、移除观察者 移除通知

[[NSNotificationCenter defaultCenter] removeObserver:@"userName"];

二、参数解析

    1、[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(update:) name:@"userName" object:nil];
    参数说明:   
            1)观察者,self代表本控制器
            2)接收到通知后调用的方法 @selector(update:)
            3)通知名称 @"userName"
            4)接收哪个发送者的通知。 nil代表接收所有发送者的通知
    2、[[NSNotificationCenter defaultCenter] postNotificationName:@"userName" object:self userInfo:dict];
    参数说明:
            1)通知名称 @"userName"
            2)通知发送者 self
            3)附带的信息 dict(如需要传的数据)
 3、[[NSNotificationCenter defaultCenter] removeObserver:@"userName"];
    参数说明:
            1)通知名称 @"userName"

总结:由此可见都需要通知名称,而且都一样,为了避免通知名称错误,可以写成宏。

三、注意事项
1、注册了观察通知的控制器就要移动要观察的通知。这是因为,当控制器因为某些原因比如内存问题而被销毁的时候,通知中心被注册的该通知还是存在的。而当其他有地方发送该通知的时候,通知中心会继续转发,但是转发的对象已经不存在了,这时候就会crash了。所有有添加就要有移除。

2、有些可能习惯在viewWillAppear和viewWillDisappear方法中配对使用,

- (void)viewWillAppear:(BOOL)animated
 {
 [super viewWillAppear:animated];

 // 注册通知
 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(update:) name:@"userName1" object:nil];
 }

 - (void)viewWillDisappear:(BOOL)animated
 {
 [super viewWillDisappear:animated];
 [[NSNotificationCenter defaultCenter] removeObserver:@"userName1"];
 }

不是说不行,但是这两个方法属于会被经常调用的方法,比如左滑右滑的时候会重复调用,还是要多考虑一下业务逻辑,避免不要的坑,
所以建议在viewDidLoad中注册通知,在dealloc中移除通知 (注:在ARC模式下 dealloc不需要 [super dealloc])

- (void)dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:@"userName"];
}

3、通知使用比较简单,适用场景 1对多模式 发出一个通知,多个对象监听。

版权声明:本文为博主原创文章,未经博主允许不得转载。

使用Jdom解析XML

关于使用jdom解析xml
  • u011526599
  • u011526599
  • 2016年10月23日 17:27
  • 1732

java中用SAX解析XML

原文地址:http://www.cnblogs.com/allenzheng/archive/2012/12/01/2797196.html 注:考虑到自己程序中表结构比较大,有几百个字段,再加...
  • w2393040183
  • w2393040183
  • 2016年07月15日 11:11
  • 1653

Android解析XML方式(二)使用PULL解析XML

在前一篇中介绍了使用SAX解析XML,本篇来讲一下如何使用JAVA自带的PULL来解析XML数据,以及它们的各自优点在哪里。 首先来看一下什么是PULL解析器以及它的基本特征: PULL解析器的运...
  • wulianghuan
  • wulianghuan
  • 2013年02月26日 21:23
  • 4259

Gson解析(详解)

先介绍一下Android原生的解析 在Android中包含四个与JSON相关的类和一个Exceptions: JSONObject    JSONArray             J...
  • heinika
  • heinika
  • 2015年11月08日 16:56
  • 2752

IOS学习:常用第三方库(GDataXMLNode:xml解析库)

一、GDataXMLNode说明 GDataXMLNode是Google提供的用于XML数据处理的类集。该类集对libxml2--DOM处理方式进行了封装,能对较小或中等的xml文档进行读写...
  • wu_shu_jun
  • wu_shu_jun
  • 2013年05月30日 09:45
  • 25861

SwiftyJSON之使用分析

SwiftYJSON
  • watertekhqx
  • watertekhqx
  • 2017年03月07日 09:17
  • 570

对Oracle软软解析的一点看法

摘要: 本文将介绍Oracle解析器的一种较为特殊的解析行为,软软解析。 杂谈  在接触过oracle优化器的特征之后,我们都知道oracle优化器的一个迷人之处,就在于share...
  • qq_40954115
  • qq_40954115
  • 2017年11月13日 14:53
  • 61

使用 Beautiful Soup 解析网页内容

安装Beautiful SoupBeautiful Soup是一个Python的HTML解析框架,我们可以利用它方便的处理HTML和XML文档。Beautiful Soup有3和4两个版本,目前3已经...
  • u011054333
  • u011054333
  • 2017年04月03日 21:34
  • 1351

java使用dcm4che3 解析dicom文件

先说一下背景吧,有一台眼底照相机,拍摄患者的眼底信息后发送dicom文件到指定的服务器上面,然后再解析dicom文件,获取其中的图片和患者的其他信息,入库 给医生筛查。在gitHub上面找了一个监听指...
  • gyhcsdn1995
  • gyhcsdn1995
  • 2017年04月05日 11:01
  • 2567

jsoup解析的常见用法

1、解析attribute中值,如下面所示的serviceID和serviceName: String str="如下所示"; 解析方法:  List> resultList = ne...
  • u014034854
  • u014034854
  • 2015年07月16日 12:12
  • 1121
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS---NSNotification使用解析
举报原因:
原因补充:

(最多只允许输入30个字)