iOS NSNotificationCenter 移除通知带来的crash

  • Where to remove observer for NSNotification?

  •  

  在dealloc方法中移除通知观察者带来crash

    NSNotificationCenter中的通知消息已经发出,而观察者对象子线程释放,也就是抛送通知消息的线程和观察者对象子线程释放的线程不一致时,存在crash风险,原因是NSNotificationCenter不是线程安全的。

    解决办法:尽早移除通知 或者保证释放和抛送通知在同一个线程。

时间: 2024-08-05 08:35:24

iOS NSNotificationCenter 移除通知带来的crash的相关文章

iOS不移除通知也不会崩溃原因

在iOS9.0之前,通知中心对观察者对象进行unsafe_unretained 引用,当被引用的对象释放时不会自动置为nil,,也就是成了野指针. iOS9.0之后通知中心对观察者做了弱引用. 参考:https://blog.csdn.net/sinat_28585351/article/details/78133756 原文地址:https://www.cnblogs.com/huaida/p/11661931.html

IOS NSNotificationCenter 通知的使用

1.注册通知 [NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notify) name:@"myNotify" object:nil]; -(void)notify { NSLog(@"notify"); } 2.触发通知 [NSNotificationCenter defaultCenter] postNotificationName:@"myNotify&

iOS NSNotificationCenter (自己实现一个通知中心XMCNotificationCenter)

系统不是已经有通知中心NSNotificationCenter了吗?为什么还要自己实现一个呢?下面我们就考虑以下例子(下面大部分是我抄下我在github上写的说明及原码): 在iOS中模块间通知我们用得最多的就是NSNotificationCenter.举个例子,现在我们有一个模块需要抛一个通知出来,通知其它模块用户名改变了,我们来看代码大致是怎么写的 发通知一方 NSString *const kUserNameChangedNotification = @"UserNameChangedNo

iOS尽量不要在viewWillDisappear:方法中移除通知

http://www.cocoachina.com/ios/20151214/14596.html 在了解控制器的生命周期之后,我们都知道viewWillAppear:方法是在控制器的view将要显示的时候调用的,而viewWillDisappear:方法是在控制器的view将要隐藏的时候调用.很多时候我们根据自身需要将相关代码逻辑添加到这两个方法中,我们看下如下代码片段: 监听键盘的通知代码 这段代码是在控制器的viewDidLoad:方法中注册了一个键盘弹出的通知和键盘隐藏的通知,然后在调用

iOS 趣谈设计模式——通知

[前言介绍] iOS的一种设计模式,观察者Observer模式(也叫发布/订阅,即Publich/Subscribe模式). 观察者模式,包含了通知机制(notification)和KVO(Key-value-observing)机制. 在这本文中,我们将介绍在日常项目当中经常使用到的通知机制这一种设计模式. 通知机制 委托机制是代理“一对一”的对象之间的通信,而通知机制是广播“一对多”的对象之间的通信: 一.是什么?[生活问题例子] “短信天气预报” 当A类发送一条信息给通知中心时,注册为用户

iOS中信息交互 通知方法传值

1.定时器 [NSTimer scheduledTimerWithTimeInterval:多长时间变动一次 target:谁的计时器 selector:@selector(方法名) userInfo:定时器信息 repeats:是否重复] 如图,表示每1秒变动一次,给自己设定的计时器,调用下面的timerAc,描述为空,重复 2.通知 [[NSNotificationCenter defaultCenter]postNotificationName:@”通知名”object:通知设立者 use

iOS NSNotificationCenter 最基本使用

NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt:2] , @"actcode",nil]; //首先设置需要通知的方法.加入通知中心.比如当程序跑到这时就通知游戏 [[NSNotificationCenter defaultCenter] postNotificationName:gameStartNotification object:nil userInf

iOS NSNotificationCenter 使用姿势详解

最近在做平板的过程中,发现了一些很不规范的代码.偶然修复支付bug的时候,看到其他项目代码,使用通知的地方没有移除,我以为我这个模块的支付闪退是因为他通知没有移除的缘故.而在debug和看了具体的代码的时候才发现和这里没有关系.在我印象中,曾经因为没有移除通知而遇到闪退的问题.所以让我很意外,于是写了个demo研究了下,同时来讲下NSNotificationCenter使用的正确姿势. NSNotificationCenter 对于这个没必要多说,就是一个消息通知机制,类似广播.观察者只需要向消

iOS 8 新给我们带来了什么

苹果WWDC2014大会公布了许多关于iOS8的激动人心的更新,包括iCloudDrive.OSXYosemite与iOS8的协作.iBook共享机制.Quick Type预测输入.Swift编程语言.iOS8向上兼容等等亮点,本文重点从针对开发者的新功能API进行介绍. 现在,开发者可以用苹果官方给出的方法实现实时的「毛玻璃」效果了(UIVisualEffect Class Reference).在此之前,虽然很多 App 使用了「毛玻璃」效果,不过都不是通过苹果官方给的方法实现的.如果希望在