链接
结论
最好是在不需要的时候就移除掉。
如果不是特别苛刻,可以直接在dealloc
函数里写。因为dealloc
函数一定会被调用的。
在dealloc
函数中移除的可能问题
由于dealloc
在Runloop
结束时会被调用。如果在Runloop
调用之前,又有一个通知到来,会造成不可预知的问题。
比如一个VC被pop出去以后,由于网络延迟等原因,在同一个Runloop
中,一个通知又被抛出,那么这个被pop的VC会接收到这个通知。如果响应通知的函数对APP内的单例做了操作,那么这个单例的状态就不对了。
iOS9以后不需要在dealloc
中移除通知了

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