写点什么

iOS 开发:开发过程中单例模式的使用

用户头像
三掌柜
关注
发布于: 1 小时前

前言

在 iOS 开发中单例的使用是一个非常经典的设计模式,对于单例模式的使用也是非常重要的环节。单例模式,由于其简单好用容易理解、同时在出问题时也容易定位的特点,在开发中经常用到的一个设计模式。本章就来分享一下单例模式的使用。

一、单例模式的基本信息

1.单例模式的定义

简单来讲,一个单例类,在整个程序中只有其一个实例,并且提供一个类方法供全局调用使用,在编译时初始化这个类,然后一直保存在内存中,到程序(APP)退出时由系统自动释放这部分的内存。

2.单例模式的作用

程序在运行过程中,可以保证一个类只有一个实例,而且这个实例容易于方便工程外部的访问,进而方便地控制了实例的个数,并且节约了系统资源。

3.单例模式的使用场景

在整个应用程序之中,共享一份资源,这份资源只用初始化一次即可。单例模式在 MRC 和 ARC 两种环境下的写法是有区别的,这里只对 ARC 环境下的写法做介绍,MRC 的不再这里介绍。

二、单例模式的具体实现步骤

大概步骤分为四步:

(1)在类的内部保留一个 static 修饰的全局变量;(2)提供一个类方法,方便外界访问;(3)重写 allocWithZone:方法,创建唯一的实例;(4)重写 copyWithZone 方法。

1.在 ARC 中单例模式的实现

需要在.m 文件中保留一个全局的 static 的实例变量,eg:


static id _instance;
复制代码
2.重写 allocWithZone:方法,创建唯一的实例,这里要注意线程安全问题
+ (id)allocWithZone:(struct _NSZone *)zone {     if (_instance == nil) {  //防止频繁加锁         @synchronized(self) {             if(_instance == nil) {  //防止创建多次                 _instance = [super allocWithZone:zone];             }        }    }    return _instance; } 
复制代码
3.提供一个类方法让工程外部文件访问唯一的实例
+ (instancetype)sharedTool {    if (_instance == nil) { //防止频繁加锁         @synchronized(self) {             if(_instance == nil) { //防止创建多次                 _instance = [[self alloc] init];             }        }    }    return _instance; }  
复制代码
4.实现 copyWithZone:方法
- (id)copyWithZone:(struct _NSZone *)zone {    return _instance;}
复制代码


最后

上述内容就是在 iOS 开发中单例使用的总结,由于单例模式的使用是非常重要的环节,也是非常重要的设计模式,所以在对于开发者来说掌握单例使用是非常重要的技能,这里不再赘述。


以上就是本章的全部内容,欢迎关注三掌柜的微信公众号“程序猿 by 三掌柜”,三掌柜的新浪微博“三掌柜 666”,欢迎关注!

发布于: 1 小时前阅读数: 3
用户头像

三掌柜

关注

某某某技术有限责任公司架构师 2021.02.05 加入

一分耕耘,不一定有一分收获,但十分耕耘,一定会有一分收获!

评论 (1 条评论)

发布
用户头像
8月日更第十九天
1 小时前
回复
没有更多了
iOS开发:开发过程中单例模式的使用