最近偶然发现项目在 ios 8 上面很容易就崩溃了,最终跟踪了一下代码,发现问题出在发送通知上,一发送就崩溃了,出现了垃圾地址俗称的僵尸对象,
image.pngBAD_ACCESS 发送通知挂掉,虽然传的值都没问题,但是通知的接收对象已经销毁了,所以会崩溃
image.png如果在iOS9或更高系统运行下是没问题的,系统做了一些优化处理;
但是在iOS8 系统下就会发生崩溃 ,当你重复执行发送通知的时候就会崩溃,其实就是因为没有移除通知
在接受通知的类或者界面里的 dealloc 方法中 移除通知就OK
/** IOS 8 发送通知崩溃的问题 */
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
Using iOS 9 or later the Foundation framework release notes contain some good news:
In OS X 10.11 and iOS 9.0 NSNotificationCenter and NSDistributedNotificationCenter will no longer send notifications to registered observers that may be deallocated.
使用iOS 9或更高版本的Foundation框架发行说明包含一些好消息:
在OS X 10.11和iOS 9.0中,NSNotificationCenter和NSDistributedNotificationCenter将不再向可能已解除分配的已注册观察者发送通知。
这下明白了吧!!!
网友评论