使用单例时的三种单例写法
1.加号方法
2.返回值类型为当前类
3.方法名以default ,standared,main,shared等开头 + 当前类名
以下以Person类为例
在.h文件里声明
+ (Person *)sharePerson;
在.m文件实现
第一种模式(单线程使用这样的模式)
+ (Person *)sharePerson {
声明为static,保证变量在程序执行期间不会回收,并且仅仅保证初始化一次
单例的空间在程序的执行期间不回收,要慎重使用,否则会造成内存堆积
static Person *person = nil;
if (!person) {
person = [[Person alloc] init];
}
return person;
}
另外一种模式(多线程使用这样的模式)
+ (Person *)sharePerson {
多线程写法
static Person *person = nil;
@synchronized(self) {
if (person == nil) {
person = [[Person alloc] init];
}
}
return person;
}
第三种模式(单线程与多线程均可使用这样的模式)
+ (Person *)sharePerson {
static Person *person = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
保证仅仅运行一次,无论是多线程,还是单线程
person = [[Person alloc] init];
});
return person;
}
转载于:https://www.cnblogs.com/claireyuancy/p/6761272.html
使用单例时的三种单例写法相关推荐
- vue单文件props写法_详解Vue 单文件组件的三种写法
详解Vue 单文件组件的三种写法 JS构造选项写法 export defaul { data, methods, ...} JS class写法 @Component export default c ...
- haproxy中acl的与或非三种規則写法
haproxy中acl的与或非三种規則写法 当我们在haproxy里面需要使用use_backend或http-request等语句去调用定义过的acl规则时,可以跟平时写程序一样,使用与,或,非三种 ...
- linq拼接where语句_C# 10. LINQ 的三种查询语句写法
C# 10. LINQ 的三种查询语句写法 前言: LINQ(语言集成查询)是 C#编程语言中的一部分.它在.NET Framework 3.5 和 C#3.0 被引入,在 System.Linq 命 ...
- 【重复提交表单】表单重复提交的三种情况,解决办法
引入 看一个重复提交表单的例子 F12可以看到,请求体中的参数在刷新页面之后仍然保留,因此每一次刷新页面,都会把现有的请求体中的表单数据提交一次到服务器,而接收的页面还是insert.jsp,于是造成 ...
- Spring boot Mybatis-Plus数据库单测实战(三种方式)
单元测试长久以来是热门话题,本文不会讨论需不需要写单测,可以看看参考资料1,我个人认为写好单测应该是每个优秀开发者必备的技能,关于写单测的好处在这里我就不展开讨论了,快速进入本文着重讨论的话题,如 ...
- C++中函数调用时的三种参数传递方式(x,*x,x)
先看三种方式实现函数中参数传递的实例程序 输入描述:两个待交换的整数 程序输出:交换后得按值传递两个整数 (一)按值传递:按值传递的过程为:首先计算出实参表达式的值,接着给对应的形参变量分配一个存储空 ...
- SQL Server 索引基础知识(10)----Join 时的三种算法简介
我们书写查询语句的时候,Join 参数之前可以是下面三个 { LOOP | MERGE | HASH } JOIN . 如果不使用,则系统自己分析那种方式快,使用那种方式. 这其实是SQL Serv ...
- vue开发入门篇(二)-axios POST提交数据的三种请求方式写法
1.Content-Type: application/json let data = {"code":"1234","name":&quo ...
- iOS开发-三种倒计时的写法
1.通过NSThread的performSelectorInBackground: 2.通过定时器,属于比较简单的写法: 3.通过GCD中的dispatch_source: 先说第一种: #impor ...
- c语言双链表排序交换节点_图解:单链表翻转的三种方式!
当我们在聊到链表反转的时候,一定说的都是单链表,双链表本身就具有前驱指针 Prev 和后续指针 next,无需进行翻转. 单链表反转,反转后的效果如下: 看起来很简单,只需要将单链表所有结点的 nex ...
最新文章
- 完胜ReLU!斯坦福的神经网络采用这种激活函数,竟高保真还原各种图像视频
- 教学一体机属于计算机的什么应用,教学一体机可以投屏吗
- 将现有MySQL数据库改为大小写不敏感
- 【机器学习基础】用Python画出几种常见机器学习二分类损失函数
- python代码用c语言封装_使用C语言扩展Python程序的简单入门指引
- 企业应用人工智能面临的挑战
- linux中如何查看进程占用了哪些端口?
- POJ 3278 Catch That Cow
- 在线获取今天是今年的第周几
- 4月28日上午学习日志
- 【Java】0X002 Hello World
- 美国数据不佳美元仍跳升,只因欧元区问题更多
- a minimal solution(30,31,32)
- linux rarcrack破解rar、zip和7z压缩包简单密码的工具
- 查看 Chrome 下载的文件的真实下载地址
- 底部菜单控件BottomNavigationView的使用
- 2021北京家庭摇号官网信息汇总
- securityCRT使用小结
- 《山海经》第一卷(南山经)南山一经
- 平面设计的表现手法有哪些比较常用