IOS 单例崩溃分析 2014-12-10 15:46:36

本文通过一个实例探讨了看似由单例模式引起的程序崩溃,实际上却是由于监听者对象提前释放所致。文章深入分析了问题的原因,并提供了一个有效的方法来定位这类问题,帮助读者在遇到类似情况时能够准确判断并解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单例模式是常用的模式,但是在单例应用中偶或引发崩溃让人匪夷所思。其实真的是单例引起的吗?未必。但是现象都指向了是单例引起的。今天我亲身经历了看似崩溃在单例上的一个例子,但实则不是,今天做个记录用于今后类似问题分析。

我在一个应用中用单例模式维护网络监听到状态。采用KVO模式来监听 networkStateInstance 的变化,监听者自己定义实现 observeValueForKeyPath 方法。先代码定义如下:

@interface SNNetState : NSObject

 // 当前网络状态

@property (nonatomic, assign) SNNetWorkStates networkStateInstance;

+ (SNNetState *)intance;

@end

实现方式如下:

+ (SNNetState *)intance {

    static SNNetState* _intance = nil;

    static dispatch_once_t netStateOnece;

    dispatch_once(&netStateOnece, ^{

        _intance = [[SNNetState alloc] init];

    });

    

    return _intance;

}

IOS 单例崩溃分析 - Nighthawk - Nighthawk

 

看现象是单例造成的问题,但是后台却告知了我们真想:IOS 单例崩溃分析 - Nighthawk - Nighthawk

 

IMsViewController 监听者对象已经释放了,当我们的networkStateInstance 变化时IMsViewController 对象已经不存在导致了崩溃。所以我们冤枉了单例,但是好多人却固执死板的认为是单例的造成的。在这有个常用的方法可以帮助大家精确到问题原因。在xcode 中选择Product -》Scheme-》Edit Scheme 弹出编辑框如图设置:IOS 单例崩溃分析 - Nighthawk - Nighthawk即可方便的定位到问题原因。

转载于:https://www.cnblogs.com/lu-ping-yin/p/10992768.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值