在开发中经常会用到单例设计模式,目的就是为了在程序的整个生命周期内,只会创建一个类的实例对象,而且只要程序不被杀死,该实例对象就不会被释放。

多线程同时访问单例时,会造成数据错误,所以我们在创建单例时要确保只能有一个线程同时访问单例。

创建单例的两种方法:

 

方法一: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方式