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. 基于Pytorch对YOLOV5 进行简易实现
  2. LED的电流与光强之间的关系
  3. 活久见!音乐在AR手里“活”了起来
  4. c语言如何回缩一个字符,撑大的胃怎样能瘦回去 被撑大的胃还能缩回去吗
  5. 如何在Linux下安装PyCharm
  6. [leetcode]从中序与后序/前序遍历序列构造二叉树
  7. html代码如何查看视频,Web前端
  8. 「管理数学基础」4.2 模糊数学:扩张原理、模糊数、可能性分布与模糊概率
  9. python自我复制的程序_Python自我
  10. Java中String、StringBuffer 、StringBuilder
  11. Java类的三大特性
  12. 在r中弄方差分析表_R语言 | 方差分析(上)
  13. python+django+mysql教室实验室预约系统毕业设计毕设开题报告
  14. 解决安卓手机DNS被污染(刷新手机DNS)
  15. 空转工具推荐 | 10款空间转录组去卷积工具的综合比较
  16. 超详细超快的免费图床设置教程
  17. Redis的IO模型以及客户端与服务端设计
  18. 328个计算机毕业设计题目
  19. mac常用快捷键,Mac文件重命名快捷键,Mac OS快速访问系统根目录
  20. 改善编程体验: IdeaVimExtension介绍 1

热门文章

  1. input 0.1无法相加_你真的知道0.1+0.2为何不等于0.3吗?
  2. uva 10539——Almost Prime Numbers
  3. 分布式是写出来的(五)
  4. C++ 不懂的地方 记录01
  5. ffmpeg的学习-00
  6. Arbitrage——判断正环Bellman-Ford/SPFA
  7. exit与_exit函fork与vfork函数
  8. bzoj2938: [Poi2000]病毒
  9. /etc/profile、/etc/bashrc、~/.bash_profile、~/.bashrc 文件的作用
  10. 图像灰度变换及图像数组操作