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

我在一个应用中用单例模式维护网络监听到状态。采用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;

}

看现象是单例造成的问题,但是后台却告知了我们真想:

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

IOS 单例崩溃分析 2014-12-10 15:46:36的更多相关文章

  1. 【iOS 单例设计模式】底层解析与运用

    [iOS 单例设计模式]底层解析与运用 一.单例设计名词解释: (官方解释)单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例.(形象比喻)程序 — 公司   单例实例 - 管理 ...

  2. 大型网站演化(转载 http://homeway.me/2014/12/10/think-about-distributed-clusters/)

    0x01.大型网站演化 简单说,分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率. 集群主要分为:高可用集群(High Availability Clu ...

  3. ios 单例的再次理解

    单例模式    在建模的时候,如果这个东西确实只需要一个对象,多余的对象都是无意义的,那么就考虑用单例模式.比如定位管理(CLLocationManager),硬件设备就只有一  个,弄再多的逻辑对象 ...

  4. iOS单例创建的一点疑惑

    线程安全的单例常用写法, +(AccountManager *)sharedManager{ static AccountManager *defaultManager = nil; disptch_ ...

  5. iOS单例设计模式具体解说(单例设计模式不断完好的过程)

    在iOS中有非常多的设计模式,有一本书<Elements of Reusable Object-Oriented Software>(中文名字为<设计模式>)讲述了23种软件设 ...

  6. iOS单例详解

    单例:整个程序只创建一次,全局共用. 单例的创建 // SharedPerson.h 文件中 + (instancetype)share; // SharedPerson.m 文件中 static S ...

  7. iOS 单例传值遇见问题

    单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 1.单例模式的要点: 显然单例模式的要点有三个:一是某个类只能有一个实例: ...

  8. iOS单例的两种实现

    单例模式算是开发中比较常见的一种模式了.在iOS中,单例有两种实现方式(至少我目前只发现两种).根据线程安全的实现来区分,一种是使用@synchronized,另一种是使用GCD的dispatch_o ...

  9. caffe可重入单例机制分析

    一个函数可重入是指该函数可以被多个线程同时调用.大多数函数都不是可重如的,因为很多函数会修改静态数据结构里的内容,如果多个线程同时调用,势必破坏共享的静态结构.可以在不改变公共接口的情况下,将一个非重 ...

随机推荐

  1. CSS和JS实现文本溢出显示省略号

    本文记录实现文本溢出显示省略号的几种方式. 单行文本 三行CSS代码实现: overflow: hidden; // 文本溢出隐藏 text-overflow: ellipsis; // 显示省略号 ...

  2. Centos 7 下安装PHP7.2(与Apache搭配的安装方式)

    (1)源码包下载 百度云下载地址:https://pan.baidu.com/s/1xH7aiGYaX62wij4ul5P-ZQ 提取码:m9zc (2)安装php依赖组件: yum -y insta ...

  3. Android中的ANR问题

    ANR:(Application Not Responding) 1.为什么会产生ANR 在Android中App的相应能力是由Activity Manager和Window Manager系统服务来 ...

  4. Day01_虚拟化架构与系统部署

    学于千峰教育开源课程 感恩 千峰教育官网 b站在线视频 前言:本人所使用的操作系统是MacOS 使用的虚拟机软件为parallels desktop 本章结构 构建桌面端虚拟环境 虚拟机的概述 VMa ...

  5. 读/写docx文件

    安装 pip install python-docx 1.建立新Word文档 建立新文档需要调用Document对象的save方法,一个Document对象代表一个Word文档,该方法的参数是保存的文 ...

  6. PHP array_pop() 函数

    实例 删除数组中的最后一个元素: <?php$a=array("red","green","blue");array_pop($a); ...

  7. PHP checkdate() 函数

    ------------恢复内容开始------------ 实例 检查一些日期是否是有效的格利高里日期: <?phpvar_dump(checkdate(12,31,-400));echo & ...

  8. 死磕HashMap

    前言 HashMap是Java中最常用的集合类框架,也是Java语言中非常典型的数据结构,同时也是我们需要掌握的数据结构,更重要的是进大厂面试必问之一. 数组特点 存储区间是连续,且占用内存严重,空间 ...

  9. setOff与scrollTop区别

    1.offsetTop     : 当前对象到其上级层顶部的距离. 不能对其进行赋值.设置对象到页面顶部的距离请用style.top属性. 2.offsetLeft    : 当前对象到其上级层左边的 ...

  10. [转]Springboot项目的接口防刷的实例

    来源:微信公众号 马士兵 原地址:https://mp.weixin.qq.com/s/tHQcWwIt4c41IUnvCQ2QWA 说明:使用了注解的方式进行对接口防刷的功能,非常高大上,本文章仅供 ...