在开发中经常会用到单例设计模式,目的就是为了在程序的整个生命周期内,只会创建一个类的实例对象,而且只要程序不被杀死,该实例对象就不会被释放。
多线程同时访问单例时,会造成数据错误,所以我们在创建单例时要确保只能有一个线程同时访问单例。
创建单例的两种方法:
方法一:GCD方式
static MYHttpTool *httpTool = nil;
+ (instancetype)sharedHttpTool
{
static dispatch_once_t token;
dispatch_once(&token, ^{
httpTool = [[self alloc] init];
});
return httpTool;
}
注:dispatch_once保证程序在运行过程中只会被运行一次
方法二:互斥锁方式
static MYHttpTool *httpTool = nil;
+ (instancetype)sharedHttpTool{@synchronized(self) {if (_instance == nil) { httpTool = [[self alloc] init];}}return httpTool;}注:@synchronized(self)互斥锁方式会影响性能,建议使用GCD方式