1课幕、使用場(chǎng)景
單例模式一般用在需要全局唯一對(duì)象并且各個(gè)模塊都要調(diào)用的場(chǎng)景厦坛,比如項(xiàng)目中的loading圖、下載庫(kù)乍惊、應(yīng)用程序配置杜秸。
2、實(shí)現(xiàn)方法
1)線程不安全的實(shí)現(xiàn)方法
+ (CityLoadManager*)getInstance
{
static CityLoadManager* loadManager = nil;
if(!loadManager)
{
loadManager = [[CityLoadManager alloc] init];
}
return loadManager;
}
上述實(shí)現(xiàn)的邏輯漏洞是當(dāng)多個(gè)線程同時(shí)調(diào)用CityLoadManager的getInstance方法時(shí)造成線程同步問(wèn)題
2)解決1)中的問(wèn)題润绎,線程安全的實(shí)現(xiàn)方法如下
+ (CityLoadManager*)getInstance
{
static CityLoadManager* loadManager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
loadManager = [[CityLoadManager alloc] init];
});
return loadManager;
}