设计模式学习笔记(五)单件模式

定义

单间模式确保一个类只有一个实例,并提供一个全局访问点.

个人理解

我一般使用单例的时候是在例如管理类,用户信息类等等,在这些类使用单例,一方面可以方便的在内存中存贮,另一方面不用担心实例化多个对象而造成管理难度加大的问题,但我们不应该滥用单例,毕竟这种设计模式其实不应该频繁的出现在我们的程序中!!
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函数的理解

看了篇文章发现将得还不错链接,和书上讲的差不多,他是线程安全的.

你可能感兴趣的:(设计模式学习笔记(五)单件模式)