单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。
一、(线程不安全)
#import "Singleton.h"
@implementation Singleton
static Singleton *_singleTon = nil;
+ (id)sharedSingleton {
if (!_singleTon) {
_singleTon = [[Singleton alloc] init];
}
return _singleTon;
}
end
二、使用dispatch_once只创建一次
#import "Singleton.h"
@implementation Singleton
+ (id)sharedSingleton {
//1.声明一个空的静态的单例对象
static Singleton *_singleTon = nil;
//2.声明一个静态的gcd的单次任务
static dispatch_once_t onceTask;
//3.执行gcd单次任务:对对象进行初始化
dispatch_once(&onceTask, ^{
_singleTon = [[Singleton alloc] init];
});
return _singleTon;
}
end
三、重写了系统提供的initialize(线程安全的方式)
#import "Singleton.h"
@implementation Singleton
static Singleton *_singleTon = nil;
+ (void)initialize {
if (self == [Singleton class]) {
_singleTon = [[Singleton alloc] init];
}
}
+ (id)sharedDataCenterByInitialize {
return _singleTon;
}
end