使用单例时的三种单例写法
Posted claireyuancy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用单例时的三种单例写法相关的知识,希望对你有一定的参考价值。
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;
}
以上是关于使用单例时的三种单例写法的主要内容,如果未能解决你的问题,请参考以下文章