IOS单例模式(Singleton)

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

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。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在开发中经常会用到单例设计模式,目的就是为了在程序的整个生命周期内,只会创建一个类的实例对象,而且只要程序不被杀死...
    VincentHK阅读 728评论 0 3
  • 单例:意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单...
    CoderZS阅读 638评论 1 13
  • 在之前的帖子里聊过状态管理有多痛苦,有时这是不可避免的。一个状态管理的例子大家都很熟悉,那就是单例。使用Swift...
    Tank丶Farmer阅读 6,547评论 0 5
  • 单例(singleton) 意图保证一个类仅有一个实例,并提供一个访问它的全局访问点。 适用性当类只能有一个实例而...
    YxxxHao阅读 513评论 0 1
  • 解决问题 ##面膜,七天即有美白效果 防备问题 面膜用得好,老公回家早 ##面膜,让岁月按下停止键 社会认可 ##...
    杨yy06阅读 201评论 0 0

友情链接更多精彩内容