博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用dispatch_once实现单例
阅读量:5151 次
发布时间:2019-06-13

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

很多人实现单例会这样写:

@implementation XXClass+ (id)sharedInstance {    static XXClass *sharedInstance = nil; @synchronized(self) { if (!sharedInstance) { sharedInstance = [[self alloc] init]; } } return sharedInstance; }

相比之下:

@implementation XXClass+ (id)sharedInstance {    static XXClass *sharedInstance = nil;    static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ if (!sharedInstance) { sharedInstance = [[self alloc] init]; } }); return sharedInstance; }

使用dispatch_once可以简化代码并且彻底保证线程安全,开发者无需担心加锁或同步。此外,dispatch_once更高效,它没有使用重量级的同步机制,若是那样做的话,每次运行代码前都要获取锁。相反,此函数采用“原子访问”来查询标记,以判断其所对应的代码原来是否已经执行过。在64位Mac OS X上测试,后者的执行速度要比前者快一倍。

转载于:https://www.cnblogs.com/Free-Thinker/p/7065088.html

你可能感兴趣的文章
js 中三元运算符的运用
查看>>
DLL函数重定向
查看>>
docker 常用命令
查看>>
Python学习笔记--8.7 函数--可变参数、关键字参数
查看>>
mysql error 2005 - Unknown MySQL server host 'localhost'(0)
查看>>
四则运算的代码的改进(三)
查看>>
价格表
查看>>
thinkphp 内置标签volist 控制换行
查看>>
spring-boot-starter家族成员简介
查看>>
Oracle所有者权限与调用者权限
查看>>
DOM总结
查看>>
使用存储过程和视图存储配置
查看>>
Excel-漏斗图分析(差异分析)
查看>>
数据分析告诉我们的四个经验教训
查看>>
ReportView动态加载带参数的RDCL文件及子报表
查看>>
inside tomcat 6, 环境搭建
查看>>
INF6027 Introduction to Data Science Analysis of the UK Police Dataset
查看>>
设计模式(创建型模式-单例模式)
查看>>
超市收银系统_定义商品的父类和各个子类的实现——1
查看>>
luogu P1003 铺地毯
查看>>