移除通知的时机

链接

结论

最好是在不需要的时候就移除掉。
如果不是特别苛刻,可以直接在dealloc函数里写。因为dealloc函数一定会被调用的。

dealloc函数中移除的可能问题

由于deallocRunloop结束时会被调用。如果在Runloop调用之前,又有一个通知到来,会造成不可预知的问题。
比如一个VC被pop出去以后,由于网络延迟等原因,在同一个Runloop中,一个通知又被抛出,那么这个被pop的VC会接收到这个通知。如果响应通知的函数对APP内的单例做了操作,那么这个单例的状态就不对了。

iOS9以后不需要在dealloc中移除通知了

?
忘记移除观察者,是很过crash发生的原因。

时间: 2024-12-21 02:49:41

移除通知的时机的相关文章

iOS NSNotificationCenter 移除通知带来的crash

Where to remove observer for NSNotification? 在dealloc方法中移除通知观察者带来crash NSNotificationCenter中的通知消息已经发出,而观察者对象子线程释放,也就是抛送通知消息的线程和观察者对象子线程释放的线程不一致时,存在crash风险,原因是NSNotificationCenter不是线程安全的. 解决办法:尽早移除通知 或者保证释放和抛送通知在同一个线程.

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

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

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

都知道viewWillAppear:方法是在控制器的view将要显示的时候调用的,而viewWillDisappear:方法是在控制器的view将要隐藏的时候调用. 这看上去没什么问题,键盘的显示和隐藏也都能监听到.可是稍微细心下就会发现,苹果在iOS7中增加了导航控制器侧滑返回功能,现在绝大多数App都使用了这项功能(有些App重写了自带的返回键之后忘记开启左滑返回手势了).那么这项功能会带来什么问题呢? 问题就是: 当触发侧滑返回时会调用系统自带的viewWillDisappear:方法,在

Android官方开发文档Training系列课程中文版:通知用户之更新或移除通知

原文地址:http://android.xsoftlab.net/training/notify-user/managing.html#Removing 当需要在不同时段发布同一事件类型的通知时,应当避免创建新的通知.相反的,应当考虑更新原有的通知,比如更改通知的某些值或者添加一些信息给通知. 下面的部分描述了如何更新通知以及如何移除通知. 修改通知 为了设置通知是可以更新的,需要在发布通知时由NotificationManager.notify(ID, notification)方法指定该通知

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

1.iOS7新增加了导航控制器侧滑手势,当触发侧滑返回时,会调用系统的viewWillDisappear:方法,取消侧滑返回时又会调用viewWillAppear:方法. 2.在做手势和通知等一系列操作之时尽量在dealloc方法中执行,添加通知尽量在viewDidLoad等一次性方法中执行. 3.在viewWillAppear:.viewWillDisappear:.viewDidAppear:.viewDidDisappear:等类似于这种会多次调用的系统方法中添加代码时,一定要多考虑业务逻

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 NSNotification Center 通知中心的使用

通知中心,它是IOS程序内部的一种消息广播机制.通过它.能够实现无引用关系的对象之间的通信. 通知中心他是基于观察者模式,它仅仅能进行程序内部通信,不能跨应用程序进程通信.当通知中心接受到消息后会依据设置,将消息发送给订阅者,这里的订阅者能够有多个. 通知中心与代理模式类似,都能够实现多个对象间通信,通知中心能够将一个通知发送给多个监听者,而代理模式每一个对象仅仅能加入一个代理.但不管是那种模式,都是一种低耦合的设计,实现对象间的通信. 使用通知中心的步骤 1.注冊观察者对某个事件(以字符串命名

iOS---代理与协议以及通知的使用

一.代理 1.代理的介绍 代理是一种通用的设计模式 代理使用方式:A 让 B 做件事,空口无凭,签个协议. 所以代理有三部分组成: 委托方: 定义协议 协议   : 用来规定代理方可以做什么,必须做什么 代理方: 按照协议完成委托方的需求 2. 协议的介绍 协议是定义了一套公用的接口,是方法的列表,但是无法实现. 可以通过代理,实现协议中的方法. 协议是公用方法,一般写在一个类里面. 如果多个类都使用这个协议,可以写成一个peotocol文件. 3.代理的使用 (1)委托某人做某事   先建立一

通知中心 - NSNotificationCenter

---恢复内容开始--- NS_ASSUME_NONNULL_BEGIN /**************** Notifications ****************/ // 通知,被发送,被接受. @interface NSNotification : NSObject <NSCopying, NSCoding> 通知的名字 @property (readonly, copy) NSString *name; 具体某一个对象. @property (nullable, readonly,