NSNotificationCenter

前几天面试富途证券,被问到添加通知的相关问题,当时有几个问题答错了,在此总结。

使用通知的要点

1.注册多少次,他的执行代码就会执行多少次

//1、注册多个通知
for (int i =0; i<3; i++) {[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(notifycationMehod:) name:@"testNotifycation" object:nil];}
//2、传递通知
[[NSNotificationCenter defaultCenter]postNotificationName:@"testNotifycation" object:nil];

输出结果

2016-12-01 17:06:23.868 NotifycationDemo[28703:10079806] receive notifycation object (null)
2016-12-01 17:06:23.868 NotifycationDemo[28703:10079806] receive notifycation object (null)
2016-12-01 17:06:23.869 NotifycationDemo[28703:10079806] receive notifycation object (null)

2.虽然注册多次通知,但是移除一次通知,同一个对象通知就会全部移除

 

3.addRemove相关方法成对出现我们平时在使用通知的时候可能会在viewWillAppear方法里面add观察者,viewWillDisappear里面remove,但是我们如果忘记remove,那么如果我们导航到当前页面再导航到另外一个页面,然后再退回当前页面,这时候我们会得到2个输出结果。

- (void)viewWillAppear:(BOOL)animated{[super viewWillAppear:animated];//注册通知[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(notifycationMehod:) name:@"testNotifycation" object:nil];
}- (void)viewWillDisappear:(BOOL)animated{[super viewWillDisappear:animated];//没有remove通知
}

2016-12-01 17:24:13.722 NotifycationDemo[28820:10087367] receive notifycation object (null)

2016-12-01 17:24:13.723 NotifycationDemo[28820:10087367] receive notifycation object (null)


4.移除一个name没有add的通知,不会崩溃

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




5 . 一个对象添加了观察者,但是没有移除,程序不会崩溃,这是为啥



@implementation NotifyTestClass- (void)registerMyNotifycation{[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(notifycationMehod) name:@"testNotifycation" object:nil];
}- (void)notifycationMehod{NSLog(@"NotifyTestClass receive notify");
}- (void)dealloc{NSLog(@"NotifyTestClass dealloc");
}
@end//局部变量 立刻释放NotifyTestClass *nt = [[NotifyTestClass alloc]init];[nt registerMyNotifycation];
//发送通知
[[NSNotificationCenter defaultCenter]postNotificationName:@"testNotifycation" object:nil];

输出结果

2016-12-01 19:29:15.039 NotifycationDemo[29035:10119206] NotifyTestClass dealloc

苹果官网文档有说明,iOS 9.0之后NSNotificationCenter不会对一个dealloc的观察者发送消息所以这样就不会崩溃了。果真我换了一个8.1的手机测试,程序崩溃了,原来是做了优化。

6 . ViewController对象在销毁的时候,系统会对他监听的通知进行清除

@implementation TwoViewController- (void)viewDidLoad {[super viewDidLoad];[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(notifycationMehod) name:@"testNotifycation" object:nil];// Do any additional setup after loading the view from its nib.
}
- (void)notifycationMehod{NSLog(@"TwoViewController receive notify");
}
- (void)dealloc{NSLog(@"TwoViewController dealloc");
}
@end

输出结果

2016-12-02 16:36:42.175 NotifycationDemo[31359:10305477] TwoViewController dealloc
2016-12-02 16:36:42.176 NotifycationDemo[31359:10305477] removeObserver = <TwoViewController: 0x7fa42381d720>

7 . 处理方法是和post通知方法在同一线程同步执行的


因此我们如果要接受一些通知更新UI的时候,我们需要回到主线程来处理。
 dispatch_async(dispatch_get_main_queue(), ^{//do your UI});

 

Reference:

NSNotificationCenter/NSNotification 使用注意点全面解析

深入思考NSNotification

 
 

转载于:https://www.cnblogs.com/H7N9/p/6653862.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372498.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java ajax html复选框,HTMLjavaSkcriptCSSjQueryajax(九)(示例代码)

一、HTML1、单选按钮 Male Female2、复选框 I have a Car3、下拉列表 VoloFita如果设置某项选定直接 fem4、设置文本域 创建按钮 5、Runnob.com因为a 标签的target属性名是inframe_a的iframe框架&#xff0c;点击链接后页面会在iframe 中出现。6、脚本 JavaScript …

Spring和JSF集成:选择项目

使用JSF&#xff0c;要使用组合框&#xff0c;列表框和复选框&#xff0c;您需要了解javax.faces.model.SelectItem类。 SelectItem表示单个可选选项。 它既包含渲染所需的信息&#xff0c;又包含选择该项目时应绑定的值。 在大多数情况下&#xff0c; SelectItems是使用值和标…

apt-get update 问题 及gcc高亮

一 gcc高亮 gcc 高亮有好几种方法。 参考 http://www.cokco.cn/thread-39909-1-1.html 这个教程&#xff1a; &#xff08;1&#xff09; git clone https://github.com/chinaran/color-compile/ &#xff08;2&#xff09; cd color-compile make sudo make install&#xff0…

对于MVC中应用百度富文本编辑器问题的解决办法

&#xff11;.对于应用富文本编辑器&#xff50;&#xff4f;&#xff53;&#xff54;提交表单内容提示有危险的解决办法&#xff1a; [ValidateInput(false)] //文本编辑器的表单提交不用提示危险 [HttpPost] public ActionResult Create(FormCollection collection) 即在视图…

html5页面热力图几十万数据,基于百度地图的数据可视化,包括大量数据的标绘以及热力图的插入...

(function(global, factory) {typeof exports object && typeof module ! undefined ? module.exports factory() :typeof define function && define.amd ? define(factory) :(global.PointLine factory());}(this, (function() {use strict;/*** autho…

管理Jenkins作业配置

在JBoss工具和Developer Studio中&#xff0c;我们在Jenkins中管理许多构建作业。 实际上&#xff0c;对于3.2.x / 4.x和3.3.x / 5.x流&#xff0c;有195个以上的作业。 当我们开始建立明年的第一个里程碑时&#xff0c;我们将再产生40多个工作岗位。 这里是其中的一些&#xf…

Redis命令拾遗三(列表List类型)

本文版权归博客园和作者吴双本人共同所有。转载和爬虫请注明原文地址 Redis五种数据类型之列表类型Redis五种数据类型之列表类型。你可以存储一个有序的字符串列表一类数据。比如你想展示你所存储的所有文章中的前十条&#xff0c;当分页取下一页的时候&#xff0c;你也可以取接…

angular2安装笔记

主要摘自&#xff1a;http://www.runoob.com/angularjs2/angularjs2-typescript-setup.html http://blog.csdn.net/lgpwwa/article/details/51788035 开始尝试的时候npm install一直不能正常生成modules文件内的东东&#xff0c;后来试了多次才知道&#xff0c;大概是因为服务器…

计算机桌面上的声音图标没了怎么办,电脑声音图标不见了怎么办超详细教程

我们在用电脑或者平板看视频、听歌的时候&#xff0c;如果声音不合适&#xff0c;大了或小了就会调节音量&#xff0c;除了可以选择设备自带的外部音量大小调节按键外&#xff0c;还可以用自带的声音图标来调节&#xff0c;而屏幕上的声音图标是最方便的。如果屏幕上的声音图标…

XML解组基准:JAXB,STAx,Woodstox

介绍 上周末&#xff0c;我开始考虑如何以一种资源友好的方式处理大量XML数据。我要解决的主要问题是如何以块的形式处理大型XML文件&#xff0c;同时提供上游/下游系统&#xff0c;需要处理一些数据。 当然&#xff0c;我已经使用JAXB技术已有几年了。 使用JAXB的主要优点是可…

ArcGIS空间分析工具

1. 3D分析 1.1. 3D Features toolset 工具 工具 描述 3D Features toolset &#xff08;3D 要素工具集&#xff09; Add Z Information 添加 Z 信息 添加关于具有 Z 值的要素类中的要素的高程属性的信息。 Buffer 3D 3D 缓冲 围绕点或线创建三维缓冲区以生成球形或圆柱形的多面…

SHELL编程中如果路径名遇到括号

linux中&#xff0c;如果文件名中带括号&#xff0c;应先对括号处理&#xff0c;在“(”和“&#xff09;”前加上“\”。Bracket_Handle给出了处理方法&#xff1a;sub Bracket_Handle { my ($tmp_name) _; $tmp_name ~ s/\(/\\\(/g; # ( > \( $tmp_name ~ s/\)/…

计算机科学家和心理学家合作,生物智能与人工智能之间的合作

李飞飞带领的斯坦福“以人为本AI研究院”发表文章&#xff0c;探讨人工智能、神经科学、心理学和认知科学&#xff0c;以及数学、物理和社会科学等学科过去是怎样、以及未来将如何共同合作&#xff0c;追求对理解和创造智能系统的探索。最初的类人智能出现在几百万年前的非洲大…

JavaOne 2012 – 2400小时! 一些建议

您可能已经看到JavaOne 2012 Content Catalog在线。 计划委员会经过数周的艰苦工作&#xff0c;对每个提案进行了分类&#xff0c;审查&#xff0c;评分和讨论&#xff0c;我们终于为您设置了&#xff08;希望如此&#xff09;有趣的组合。 整整105天或2400个小时&#xff0c;我…

C语言

自定义函数 &#xff08;1&#xff09;在函数使用之前定义函数 &#xff08;2&#xff09;先声明这个函数&#xff0c;然后使用&#xff0c;使用的代码后面定义这个函数 include <stdio.h> void syahello(){ println("helloo"); }int main(){ sayhello(); // 调…

【Centos】yum 安装mariaDB

[dream361za ~]$ sudo yum search mariadb #查找需安装的包 mariadb-libs.x86_64 : The shared libraries required for MariaDB/MySQL clients #mariadb客户端 mariadb-server.x86_64 : The MariaDB server and related files #mariadb服务 [dream361za ~]$ sudo yum instal…

对口升学计算机组装与维护,对口升学信息技术(计算机)类2017年专业课考试大纲...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼山西省中等职业学校对口升学考试大纲信息技术类专业本考试大纲是以国家中等职业学校计算机专业教学指导方案为依据&#xff0c;以中等职业教育国家规划教材《物理(电工电子类)》(李广华、郝翠兰主编&#xff0c;电子工业出版社)、《…

网页性能优化(初窥)

面试的时候经常会被问到的有关于前端性能优化这一块的问题&#xff0c;扯扯个人的理解 第一条&#xff1a;减少 HTTP 次数的请求 80%的最终用户响应时间花在前端程序上&#xff0c;而其大部分时间则花在各种页面元素&#xff0c; 如图像、 样式表、 脚本和 Flash 等&#xff0c…

STM32F10x_硬件I2C主从通信(轮询发送,中断接收)

Ⅰ、写在前面 关注我分享文章的朋友应该知道我在前面讲述过&#xff08;软件、硬件&#xff09;I2C主机控制从机EEPROM的例子。在I2C通信主机控制程序是比较常见的一种&#xff0c;可以说在实际项目中&#xff0c;很多应用都会使用到I2C通信。但在实际项目中作为I2C从机的应用相…

JavaFX 2:创建登录表单

在本教程中&#xff0c;我将使用JavaFX 2和CSS设计漂亮的Login Form 。 它是经典的登录表单&#xff0c;带有用户名和密码以及登录按钮。 为了遵循本教程&#xff0c;我强烈建议您查看以下这些教程&#xff1a; Eclipse IDE中的JavaFX 2入门 JavaFX 2&#xff1a;HBox JavaFX…