定义
单间模式确保一个类只有
一个实例,并提供一个全局
访问点.
个人理解
我一般使用单例的时候是在例如管理类
,用户信息类
等等,在这些类使用单例
,一方面可以方便的在内存中存贮
,另一方面不用担心实例化多个
对象而造成管理难度加大的问题,但我们不应该滥用
单例,毕竟这种设计模式其实不应该频繁
的出现在我们的程序中!!
在OC
中我们可以利用GCD
来创建一个单例
,单例的实例化如果代码编写正确的话应该是只会实例化出一个对象的,并且也向全局提供了一个实例化入口.在这里这种做法已经很熟悉了,主要在书中,作者提到了对多线程
的处理,这里需要关注一下,作者使用的是加锁
这种技术.我在这里主要是想看看GCD
是怎么做的呢?
OC
中的单例创建
很多小伙伴是这么做的,利用dispatch_once_t
这个函数限定了init
这个方法的执行次数,其实我们并不应该改限定这个方法的执行次数,严谨的来讲,我们应该限制allocWithZone:
这个方法的函数,这个方法会为对象开辟
空间,如果我们利用GCD
来保证只会开创一次空间,那么这个单例其实就只会实例化出一个对象了.
static FYLocationManager *_share = nil;
+ (FYLocationManager *)shareManager{
static dispatch_once_t once = 0;
dispatch_once(&once, ^{
_share = [[super allocWithZone:NULL] init];
});
return _share;
}
+ (id)allocWithZone:(struct _NSZone *)zone
{
return [self shareManager];
}
dispatch_once_t
函数的理解
看了篇文章发现将得还不错链接,和书上讲的差不多,他是线程安全
的.