单例设计模式是IOS开发中一种很重要很常用的一种设计模式。它的设计原理是无论请求多少次,始终返回一个实例,也就是一个类只有一个实例。下面是苹果官方文档中关于单例模式的图片:

  如图所示,左边的图是默认的多例模式,只要发送请求去创建对象,就会得到一个新的对象;而右侧的图是单例模式,发送多个请求创建对象,但是最后返回的始终是同一个。

  因为创建单例类的实例是在确保没有其他实例的情况下才创建的,并且在程序中使用的过程中始终是同一个实例,因此单例类可以作为提供一个全局访问资源的类,比如NSUserDefaults,我们可以通过它存储数据,它里面的数据就是全局的,无论在哪个类里面操作都是一样的。此外,一个单例类还可以防止调用者复制、保留或释放实例。因此,在开发的工程中可以根据需要来创建不同的单例类。

  单例的创建分Non-ARC(非ARC)和ARC+GCD,后者现在用的比较广泛,它保证了线程的安全,满足了静态分析器的要求,还兼容了ARC,代码如下:

+(AccountManager *)sharedManager
{
static AccountManager *sharedAccountManagerInstance = nil;
static dispatch_once_t predicate;
dispatch_once(&predicate, ^{
sharedAccountManagerInstance = [[self alloc] init];
});
return sharedAccountManagerInstance;
}

  代码分析:

  通过这个类方法,可以得到当前类的单例对象。

  在方法中先声明了一个实例,并初始化为nil,前面的static关键字可以保证只执行一次为nil的操作。dispatch_once_t是多线程中的,保证只执行一次。dispatch_once这个函数用于检查该代码块是否已经被调用过,通过它不仅可以保证块里面初始化的代码仅被运行一次,还能保证线程的安全。

  单例的使用非常简单,可以通过上面的类方法来创建任何你想要的单例类,只需要把AccountManager修改为你想要创建类的名称,然后通过下面代码来创建实例即可:

AccountManager *manager = [AccountManager sharedManager];

IOS中的单例设计模式的更多相关文章

  1. iOS 中的单例设计模式

    单例设计模式:在它的核心结构中只包含一个被称为单例类的特殊类.例如文件管理中的NSUserDefault,应用程序中的UIApplication,整个应用程序就这一个单例类,负责应用程序的一些操作,单 ...

  2. iOS开发之单例设计模式(完整正确版本)

    单例的意思从字面上就可以略知一二,所谓单例就是确保在程序运行过程中只创建一个对象实例.可以用于需要被多次广泛或者说多次使用的资源中,比如我们常见的网络请求类.工具类以及其它管理类等.比如我iOS开发中 ...

  3. iOS中编写单例类的心得

    单例 1.认识过的单例类有哪些: NSUserDefaults.NSNotificationCenter.NSFileManager.UIApplication 2.单例类 单例类某个类在代码编写时使 ...

  4. OC中的单例设计模式及单例的宏抽取

    // 在一个对象需要重复使用,并且很频繁时,可以对对象使用单例设计模式 // 单例的设计其实就是多alloc内部的allocWithZone下手,重写该方法 #pragma Person.h文件 #i ...

  5. Java中常用来处理时间的三个类:Date、Calendar、SimpleDateFormate,以及Java中的单例设计模式:懒汉式、饿汉式以及静态内部类式

    (一)java.util.Date类 1.该类有一个long类型的属性:用来存放时间,是用毫秒数的形式表示,开始的日期是从1970年1月1号 00:00:00.    2.该类的很多方法都已经过时,不 ...

  6. Python中的单例设计模式

    1)设计模式: 是前人工作的总结和提炼.通常,被人们广泛流传的设计模式.     某一问题的特定解决方案,使用设计模式是为了可重用代码,是代码更容易被人理解, 增加代码的可用性. 2)单例设计模式: ...

  7. iOS——Swift开发中的单例设计模式(摘译,非原创)

    最近在开发一个小的应用,遇到了一些Objective-c上面常用的单例模式,但是swift上面还是有一定区别的,反复倒来倒去发现不能按常理(正常的oc to swift的方式)出牌,因此搜索了一些帖子 ...

  8. iOS中的单例

    #import "Singleton.h" @implementation Singleton static Singleton *singleton = nil; + (Sing ...

  9. java中的单例设计模式

    单例模式有一下特点: 1.单例类只能有一个实例. 2.单例类必须自己自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供 ...

随机推荐

  1. Java数据类型在实际开发中的应用二枚举类型

    在实际编程中,往往存在着这样的"数据集",它们的数值在程序中是稳定的,而且"数据集"中的元素是有限的.在JDK1.5之前,人们用接口来描述这一种数据类型. 1. ...

  2. 设计模式 - 代理模式(jdk)

    定义:为另一个对象提供一个替身或占位符以控制对这个对象的访问. 一.静态代理 静态代理说白了就是把原先直接调用被代理类的方法放到代理类来调用,同时 我们可以在代理类额外的添加一些操作. 接口: pac ...

  3. 【Xbox one S】开箱&开机&初入坑心得

    再来一发水贴,先上产品标准照镇贴: 前言 身为一个资深单机游戏玩家,常年混迹在PC平台,但内心深处一直对主机有种迷之向往,感觉那才是单机游戏的正处之地,坐沙发上拿着手柄对着电视跌宕起伏才是正确的游戏姿 ...

  4. 十年过去了,各位 .net 兄弟还好吗

    时间是最无情的,一下子就毕业10年了.很久没有发发牢骚了,今天突然想发一下.看过我文章喷过的知道,我一般都是散文,看完不知道我写了什么,形散而神不散嘛. 十年了,不好意思,没像网上说的标准一样,做管理 ...

  5. 腾讯云centos7服务器环境搭建,tomcat+jdk+mysql+nginx

    软件:jdk 1.8.0_45 tomcat 8.5.8 mysql 5.6.36 nginx 1.10.x或以上 其中tomcat在centos6.8中没问题,centos7中会出现卡在启动那里 I ...

  6. 关于MUI集成微信分享遇到的坑

    今天聊一下MUI这个框架吧! 首先,用这个框架也有很长一段时间了,项目不同,涉及到的功能也有不同,之前没有涉及到微信分享相关的内容!今天,遇到了,也解决了,分享出来. 下面是手顺: 1.分享的代码是参 ...

  7. (转)logback 打印Mybitis中的sql执行过程

    场景:在程序开发过程中经常需要跟踪程序中sql语句的执行过程,在控制台打印出sql语句和对应的参数传递就能够更快的定位错误! 原文出处:http://www.cnblogs.com/beiyeren/ ...

  8. 创建PDF模板,java添加内容、导出下载PDF

    本文主要内容是:用java在pdf模板中加入数据,图片. 废话不多说,举个非常简单的例子: 首先创建word文档,导出PDF. 用 软件adobe acrobat打开,操作步骤如图: 在指定位置添加文 ...

  9. 【JAVASCRIPT】React学习- 数据流(组件通信)

    摘要 react 学习包括几个部分: 文本渲染 JSX 语法 组件化思想 数据流 一 组件通信如何实现 父子组件之间不存在继承关系 1.1 父=>子通信 父组件可以通过 this.refs.xx ...

  10. 【JAVASCRIPT】React学习-巧用 props 的 children 属性实现内容填充

    背景 平常写组件,经常遇到需要获取内容放入组件内部的情形. 实现方法 我们有两种实现方式 1. 自定义 props render 的时候通过获取 this.props.content 填充到组件内部 ...