Cocoa touch 为什么我需要在对象I';m:是不是取消分配了?
发件人: 必须在指定的任何对象之前调用removeObserver:或removeObserver:名称:object: addObserverForName:对象:队列:usingBlock:已解除分配Cocoa touch 为什么我需要在对象I';m:是不是取消分配了?,cocoa-touch,nsnotificationcenter,Cocoa Touch,Nsnotificationcenter,发件人: 必须在指定的任何对象之前调用removeObserver:或removeObserver:名称:object: addObserverForName:对象:队列:usingBlock:已解除分配 为什么在解除分配正在观察其通知的对象之前停止观察很重要?我理解为什么作为观察者,我需要停止观察,如果我要消失,而障碍取决于我的存在,但我不理解为什么被观察物体的寿命很重要。我是否误解了这一点?如果您不删除observer,它可能会导致您已经销毁了一个对象,但仍然发送了通知-这将导致“messa
为什么在解除分配正在观察其通知的对象之前停止观察很重要?我理解为什么作为观察者,我需要停止观察,如果我要消失,而障碍取决于我的存在,但我不理解为什么被观察物体的寿命很重要。我是否误解了这一点?如果您不删除observer,它可能会导致您已经销毁了一个对象,但仍然发送了通知-这将导致“message sent to deallocated instance”错误 我理解为什么作为观察者,我需要停止观察,如果我要消失,而障碍取决于我的存在,但我不理解为什么被观察物体的寿命很重要 我认为可能的解释如下
addObserverForName:object:queue:usingBlock
description说明:
向接收方的分派表添加一个条目,其中包含通知队列和要添加到队列的块,以及可选条件:通知名称和发件人
在此上下文中,“发送者”只是对象
参数的另一个名称,以下术语对其进行了描述:
要将其通知添加到操作队列的块的对象。
如果传递nil,则通知中心不会使用通知的发送者来决定是否将块添加到操作队列
因此,object
充当一种过滤器:当收到通知时,通知中心根据该值(如果存在)决定是否必须将块添加到指定的操作队列中
现在,考虑一下:
我承认这是一个非常罕见的案例,但它可能会发生,所以你最好编写代码来反对它。对,但如果我作为观察者消失的话。文档似乎建议我需要在正在观察的对象消失之前删除自己,因为它说“addObserverForName指定的任何对象:对象:队列:usingBlock:is deallocated”不,您不需要在正在观察的对象消失之前删除自己。这毫无意义。文档只影响被标记为观察者的对象。那么,它在谈论什么对象呢?此方法注册一个块以观察通知,而不是对象+选择器。块已经保留了它所持有的任何内容。