产生原因
注册观察者后,没有在观察者dealloc时及时注销观察者,极有可能通知中心再发送通知时发送给僵尸对象而发生Crash。(iOS9以后不会Crash)
防护方案
在宿主释放过程中嵌入我们自己的对象,使得宿主释放时顺带将我们的对象一起释放掉,从而获取dealloc的时机点
实现
(1)创建一个NSObject的分类NSObject+AdNotifyEvent。在这个Category中,我们创建了添加观察者的方法,其具体实现由它的associate Object实现。这里的associate Object是类SLVObserverAssociater的对象。
|
|
(2)SLVObserverAssociater的实现
|
|
.m
|
|
(3)为通知的回调block排了优先级
|
|
(4)test
|
|