单例
1、封装一个共享的资源
2、提供一个固定的实例创建方法
3、提供一个标准的访问接口
支持线程安全
方法一:
staticMySingleton *g_MySingleton;
+ (MySingleton *)shareMySingleton
{
@synchronized(self){
if (g_MySingleton ==nil) {
g_MySingleton = [[selfalloc]init];
}
}
returng_MySingleton;
}
方法二:
+ (MySingleton *)shareMySingleton
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
if (g_MySingleton ==nil) {
g_MySingleton = [[selfalloc]init];
}
});
returng_MySingleton;
}
static pthread_mutex_t g_mutex1 =PTHREAD_MUTEX_INITIALIZER;
staticMySingleton *g_MySingleton =nil;
staticBOOL g_isInit = NO;
+ (MySingleton *)shareMySingleton
{
//double check 技巧 需要掌握
if (g_MySingleton ==nil)
{
pthread_mutex_lock(&g_mutex1);
if (g_MySingleton ==nil)
{
g_MySingleton = [[Aalloc] init];
}
pthread_mutex_unlock(&g_mutex1);
}
returng_MySingleton;
}