单例模式是常用的模式,但是在单例应用中偶或引发崩溃让人匪夷所思。其实真的是单例引起的吗?未必。但是现象都指向了是单例引起的。今天我亲身经历了看似崩溃在单例上的一个例子,但实则不是,今天做个记录用于今后类似问题分析。
我在一个应用中用单例模式维护网络监听到状态。采用KVO模式来监听 networkStateInstance 的变化,监听者自己定义实现 observeValueForKeyPath 方法。先代码定义如下:
@interface SNNetState : NSObject
// 当前网络状态
@property (nonatomic, assign) SNNetWorkStates networkStateInstance;
+ (SNNetState *)intance;
实现方式如下:
+ (SNNetState *)intance {
static SNNetState* _intance = nil;
static dispatch_once_t netStateOnece;
dispatch_once(&netStateOnece, ^{
_intance = [[SNNetState alloc] init];
});
return _intance;
}
看现象是单例造成的问题,但是后台却告知了我们真想:
IMsViewController 监听者对象已经释放了,当我们的networkStateInstance 变化时IMsViewController 对象已经不存在导致了崩溃。所以我们冤枉了单例,但是好多人却固执死板的认为是单例的造成的。在这有个常用的方法可以帮助大家精确到问题原因。在xcode 中选择Product -》Scheme-》Edit Scheme 弹出编辑框如图设置:即可方便的定位到问题原因。
手机扫一扫
移动阅读更方便
你可能感兴趣的文章