iOS开发之单例模式

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];

}

时间: 2024-10-08 14:21:51

iOS开发之单例模式的相关文章

iOS开发之单例模式下的初始化方法

iOS开发之单例模式下的初始化方法 一般的单例我们会这么写 +(instancetype)sharedXXXManager{ static XXXManager *sharedXXXManagerInstance = nil; static dispatch_once_t predicate; dispatch_once(&predicate,^{ sharedXXXManagerInstance = [[XXXManager alloc] initPrivate]; }); return sh

IOS开发笔记——单例模式

由java转入IOS开发了,自学配合实际项目记录一些项目中用到的技巧,APP比较小,涉及到的知识点比较简单,大牛就不用看了,小兵大家一起讨论. 单例模式就是确保在程序运行过程中,一个类只有一个实例,公司的APP的账号管理是通过单例实现的.先上代码: @interface JVAccountManager : NSObject + (JVAccountManager *)sharedAccount; @end @implementation JVAccountManager + (JVAccoun

iOS开发:单例模式

这是我的开园第一篇,至于为什么要写单例模式,是因为我在学习ios之初对单例模式的概念比较模糊,特意在这做一次整理,希望可以和大家分享. 一,ios单例模式的概念(什么是单例模式) 单例模式最主要的一点就是只有一个实例.实例是什么?实例就是对象一个叫法,对象实例化,用前辈的一个比喻就是说:制作月饼的磨具就是类,月饼就是对象,制作月饼的过程叫做对象实例化. 这个类只拥有一个实例,我们称之为单例类.这个单例类需要向整个工程或者说里面的各个类提供它的实例,通俗一点说,小明(实例对象)在一年级四班,他可以

【iOS开发】单例模式设计(ARC & MRC)

适用于ARC & MRC 1 // 帮助实现单例设计模式 2 3 // .h文件的实现 4 #define SingletonH(methodName) + (instancetype)shared##methodName; 5 6 // .m文件的实现 7 #if __has_feature(objc_arc) // 是ARC 8 #define SingletonM(methodName) 9 static id _instace = nil; 10 + (id)allocWithZone:

iOS 开发之单例模式

单例就是project中仅仅初始化一次,节省内存空间.或者共享资源.比如在创建蓝牙类,或者做WiFi通信时经经常使用到.也能够用来传值. 一下介绍两种创建单例的方法 一,考虑线程安全的写法 /** * 考虑线程安全的写法 * * @return ModelTool对象 */ +(instancetype)shareModel{ static ModelTool *model = nil; static dispatch_once_t onceToken; dispatch_once(&onceT

iOS开发 创建单例模式

+ (id)defaultNSObjectName { static id defaultNSObjectName = nil; static BOOL token = NO; if (!token) { token = YES; defaultNSObjectName = [[NSObject alloc] init]; } return defaultNSObjectName; }

iOS开发——实用技术OC篇&单例模式的实实现(ACR&MRC)

单例模式的实实现(ACR&MRC) 在iOS开发中单例模式是一种非常常见的模式,虽然我们自己实现的比较少,但是,系统却提供了不少的到来模式给我们用,比如最常见的UIApplication,Notification等, 那么这篇文章就简单介绍一下,我们开发中如果想要实现单例模式要怎么去实现! 单例模式顾名思义就是只有一个实例,它确保一个类只有一个实例,并且自行实例化并向整个系统提供这个实例.它经常用来做应用程序级别的共享资源控制.这个模式使用频率非常高,通过一个单例类,可以实现在不同窗口之间传递数

IOS开发常用设计模式

IOS开发常用设计模式 说起设计模式,感觉自己把握不了笔头,所以单拿出iOS开发中的几种常用设计模式谈一下. 单例模式(Singleton) 概念:整个应用或系统只能有该类的一个实例 在iOS开发我们经常碰到只需要某类一个实例的情况,最常见的莫过于对硬件参数的访问类,比如UIAccelerometer.这个类可以帮助我们获得硬件在各个方向轴上的加速度,但是我们仅仅需要它的一个实例就够了,再多,只会浪费内存. 所以苹果提供了一个UIAccelerometer的实例化方法+sharedAcceler

iOs开发 单例模式 省懒宏

#define singleton_h(name) + (instancetype)shared##name; #if __has_feature(obj_arc) #define singleton_m(name)static id _instance;+ (instancetype)shared##name{static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{_instance = [[self alloc] init];