1、概述

单例模式是一种常用的软件设计模式,通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。

如果希望系统中某个类的对象只能存在一个,单例模式是最好的解决方案,iOS中最常见的单例就是UIApplication 。

应用场景:

音频播放,背景音乐!

硬件资源:加速器、[UIScreen mainScreen]

一般都是通过sharedXX, mainXXX去获得这个单例对象。

常见面试题:手写单例

优点:

可以阻止其他对象实例化单例对象的副本,从而确保所有对象都访问唯一实例

缺点:

单例对象一旦建立,对象指针是保存在静态区的,单例对象在堆中分配的内存空间,会在应用程序终止后才会被释放

2、单例的实现步骤

第一步:重写allocWithZone方法

allocWithZone方法是对象分配内存空间时,最终会调用的方法,重写该方法,保证只会分配一个内存空间

+ (id)allocWithZone:(struct _NSZone *)zone

{

static Ticket *instance;

static dispatch_once_t onceToken;//用来检测是否只被执行一次

//dispatch_once是线程安全的,能够做到在多线程的环境下Block中的代码只会被执行一次

dispatch_once(&onceToken, ^{

instance = [super allocWithZone:zone];

});

return instance;

}

第二步:建立sharedXXX类方法,便于其他类访问

+ (instancetype)sharedTicket

{

return [[self alloc] init];

}

iOS开发之单例模式相关推荐

  1. IOS开发中单例模式使用详解

    第一.基本概念 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问. 第二.在IOS中使用单例模式的情 ...

  2. iOS开发笔记-两种单例模式的写法

    iOS开发笔记-两种单例模式的写法 单例模式是开发中最常用的写法之一,iOS的单例模式有两种官方写法,如下: 不使用GCD #import "ServiceManager.h"st ...

  3. IOS开发基础之单例模式

    IOS开发基础之单例模式 各种编程语言都有单例模式.起初23设计模式是来自C++总结设计出来的.其他编程语言陆续也出来了. 直接上源码.为了方便起见,打印日志我也放到源码里面了. // // View ...

  4. iOS开发-简单工厂模式

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性.概念很长,iOS开发中最常 ...

  5. IOS开发系列--IOS程序开发概览

    IOS开发系列--IOS程序开发概览 2014-08-04 19:42 by KenshinCui, 9983 阅读, 51 评论, 收藏, 编辑 概览 终于到了真正接触IOS应用程序的时刻了,之前我 ...

  6. iOS设计模式(02):单例模式

    分享到:QQ空间新浪微博腾讯微博微信 单例模式是一个类在系统中只有一个实例对象.通过全局的一个入口点对这个实例对象进行访问.在iOS开发中,单例模式是非常有用的一种设计模式.如下图,是一个简单的例模式 ...

  7. iOS开发系列--并行开发其实很容易

    --多线程开发 概览 大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算.可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行.但是机器码是按顺序执行的, ...

  8. 开发必看 | iOS开发常用设计模式!

    ios开发学习中,经常弄不清楚ios的开发模式,今天我们就来进行简单的总结和探讨~ (一)代理模式 应用场景:当一个类的某些功能需要由别的类来实现,但是又不确定具体会是哪个类实现. 优势:解耦合 敏捷 ...

  9. IOS开发中的几种设计模式

    ios开发学习中,经常弄不清楚ios的开发模式,今天我们就来进行简单的总结和探讨~ (一)代理模式 应用场景:当一个类的某些功能需要由别的类来实现,但是又不确定具体会是哪个类实现. 优势:解耦合 敏捷 ...

最新文章

  1. 如何利用 C# 爬取Gate.io交易所的公告!
  2. 前端代码标准最佳实践:HTML篇
  3. mysql锁相关讲解及其应用——《深究mysql锁》
  4. plotly使用mapbox实现地图可视化
  5. 洛谷P4315 月下“毛景树”
  6. 安卓桌布显示的dip和px
  7. Excel的poi缓存问题
  8. 高等数学超入门学习笔记
  9. linux清空串口接收buff,openwrt解除console对串口的占用
  10. poj-2955-Brackets-区间DP
  11. 加载文件流_jvm类加载的过程
  12. python语言原理_梯度下降算法的原理用Python语言实现,易于理解,python,更
  13. 主板rgb接口是什么_什么是主板?
  14. 矩阵标准型的系数是特征值吗_「线性代数」根据特征值,将二次型化为标准形、规范形...
  15. 班级logo设计分析
  16. 内核手动释放内存方法
  17. 企业微信小程序-获取员工信息
  18. Multisim实现极简数码管显示
  19. GMA Round 1 YGGDRASIL
  20. 11张网络安全思维导图,快收藏!

热门文章

  1. 导出文件_一招解决PDF文件导出图片
  2. 如何在Visual Studio项目中正确添加汇编代码 .
  3. python3字符串处理,高效切片
  4. matlab频率阻抗,有分析阻抗的matlab脚本吗?
  5. 使用mp4v2将aac音频h264视频数据封装成mp4开发心得
  6. C++ 模板全特化中的函数特化
  7. 【Linux系统编程学习】信号、信号集以其相关函数
  8. php如何修改文件名,php修改文件名的实现方法_后端开发
  9. 华为照片在哪个文件夹_原来华为手机还能这样清理垃圾,怪不得你的手机可以多用5年...
  10. Mybatis学习笔记18 - 缓存