博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
两种单例的实现方式
阅读量:6259 次
发布时间:2019-06-22

本文共 938 字,大约阅读时间需要 3 分钟。

在IOS中单例设计模式有很广泛的用途,它保证一个类只有一个实例,并提供一个访问它的全局访问点,一个app只有一个实列,也就是说他一直存在,除非你手动置空,在内存里面也只会用到一个地址.

苹果官方提供了很多单列对象供用户使用,例如:

UIApplication类提供了 +sharedApplication 方法创建和获取UIApplication单例.

NSBundle类提供了 +mainBundle 方法获取NSBundle单例.

NSFileManager类提供了 +defaultManager 方法创建和获得NSFileManager单例(使用代理时需要调用 -init 实例化方法来实例化一个新的对象).

NSUserDefaults类提供了 +defaultUserDefaults 方法去创建和获取NSUserDefaults单例.

NSNotificationCenter类提供了 +defaultCenter 方法创建和获取NSNotificationCenter单例.

我所知道的单例有两种实现方式,根据线程安全的实现来区分的话,一种是使用@synchronized,另一种是使用GCD的dispatch_once函数。

synchronized线程锁的方式

+ (instancetype)sharedPersonSync{staticidinstance;@synchronized(self) {if (instance ==nil) {instance = [[selfalloc] init];}}returninstance;}复制代码

GCD方式

+ (instancetype)sharedPerson {static dispatch_once_tonceToken;dispatch_once(&onceToken, ^{instance = [[self alloc] init];});returninstance;}复制代码

Warning:单例虽然可以达到共享传值的目的,但非必要的情况下最好不要使用单例的方式实例化对象.

转载于:https://juejin.im/post/5b9634cce51d450e9c5537db

你可能感兴趣的文章
org.apache.log4j.Logger 详解
查看>>
Tiny Linux -- tce-load
查看>>
Android 中自定义控件和属性(attr.xml,declare-styleable,TypedArray)的方法和使用
查看>>
vue中get和post请求
查看>>
2015-2016 ACM-ICPC, NEERC, Southern Subregional Contest A Email Aliases(模拟STL vector+map)
查看>>
Mr. Frog’s Game
查看>>
3.4可靠数据传输的原理
查看>>
多媒体通信-3-30-2018
查看>>
【Spring Boot&&Spring Cloud系列】Spring Boot中使用数据库之MySql
查看>>
【Spring Boot && Spring Cloud系列】那些Spring Boot中踩过的坑
查看>>
对XX系统的可用性和易用性改良
查看>>
大数据如何解决人工智能对文本挖掘的挑战
查看>>
updatepanel的属性
查看>>
.net 客户端调用java或.net webservice进行soapheader验证
查看>>
RadViz可视化方法--javascript实现
查看>>
软件工程综合实践的第二次实验报告
查看>>
Git储藏与恢复
查看>>
Lua 打印Table
查看>>
性能分析
查看>>
自定义php-mysqli工具增强类,支持链式调用
查看>>