美文网首页
IOS单例模式(Singleton)

IOS单例模式(Singleton)

作者: Asserts | 来源:发表于2016-06-14 14:36 被阅读0次

    单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。

    1.单例模式的要点:

    显然单例模式的要点有三个:

    1.是某个类只能有一个实例;

    2.是它必须自行创建这个实例;

    3.是它必须自行向整个系统提供这个实例。

    2.单例模式的优点:

    1.实例控制:Singleton 会阻止其他对象实例化其自己的 Singleton 对象的副本,从而确保所有对象都访问唯一实例。

    2.灵活性:因为类控制了实例化过程,所以类可以更加灵活修改实例化过程

    下面是写单例的两种正确姿势:

    1.@synchronized(self)

    +(id)sharedInstance

    {

    static Instance*obj=nil;

    @synchronized([Instance class])

    {

    if(!obj)

    obj=[[Instance alloc]init];

    }

    return obj;

    }

    这样性能就不是很好,因为每次调用+ (id)sharedInstance函数都会付出取锁的代价。下面我们使用更加简洁的方式来实现:

    2.dispatch_once

    +(id)sharedInstance

    {

    static dispatch_once_t  pred;

    static Instance*obj=nil;

    dispatch_once(&pred,^{

    obj=[[Instance alloc]init];

    });

    return obj;

    }

    这样的方法有很多优势,首先满足了线程安全问题,其次很好满足静态分析器要求。GCD可以确保以更快的方式完成这些检测,它可以保证block中的代码在任何线程通过dispatch_once调用之前被执行,但它不会强制每次调用这个函数都让代码进行同步控制。实际上,如果你去看这个函数所在的头文件,你会发现目前它的实现其实是一个宏,进行了内联的初始化测试,这意味着通常情况下,你不用付出函数调用的负载代价,并且会有更少的同步控制负载。

    因此,以后我们使用单例模式的时候尽量使用GCD。

    相关文章

      网友评论

          本文标题:IOS单例模式(Singleton)

          本文链接:https://www.haomeiwen.com/subject/fddudttx.html