1、使用场景
单例模式一般用在需要全局唯一对象并且各个模块都要调用的场景,比如项目中的loading图、下载库、应用程序配置。
2、实现方法
1)线程不安全的实现方法
+ (CityLoadManager*)getInstance
{
static CityLoadManager* loadManager = nil;
if(!loadManager)
{
loadManager = [[CityLoadManager alloc] init];
}
return loadManager;
}
上述实现的逻辑漏洞是当多个线程同时调用CityLoadManager的getInstance方法时造成线程同步问题
2)解决1)中的问题,线程安全的实现方法如下
+ (CityLoadManager*)getInstance
{
static CityLoadManager* loadManager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
loadManager = [[CityLoadManager alloc] init];
});
return loadManager;
}
网友评论