单利模式添加互斥锁

单例模式不适合使用继承实现的原因
static id _instance;在整个内存中只有一份,所以会导致一下错误,用代码说明一下:
// 比如有一个基类
YHSingelton
// YHPerson继承于YHSingelton
YHPerson : YHSingelton
// YHCar也继承于YHSingelton
YHCar : YHSingelton
// 打印出来的都是YHPerson对象
// 因为static id _instance;在整个内存中只有一份
NSLog(@"%@---%@", [YHPerson sharedInstance], [[YHCar sharedInstance]);
也可以通过互斥锁的方式实现单例模式,但是没有必要,用GCD就很好了,这里只重写allocWithZone:方法简单演示一下

// 著名的双锁技术

  • (instancetype)allocWithZone:(struct _NSZone *)zone
    {
    if (_instance == nil)
    {
    @synchronized(self)
    {
    if(_instance == nil)
    {
    _instance = [super allocWithZone:zone];
    }
    }
    }
    return _instance;
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在开发中经常会用到单例设计模式,目的就是为了在程序的整个生命周期内,只会创建一个类的实例对象,而且只要程序不被杀死...
    不要重名就好阅读 556评论 0 0
  • 在开发中经常会用到单例设计模式,目的就是为了在程序的整个生命周期内,只会创建一个类的实例对象,而且只要程序不被杀死...
    VincentHK阅读 684评论 0 3
  • 一.单列模式简介 1.什么是单列模式? a.通过static关键词,声明全局变量。在整个进程运行期间只会被赋值一次...
    笃Boy阅读 414评论 0 0
  • 单例模式的作用 可以保证在程序运行过程,一个类只有一个实例,而且该实例易于供外界访问 从而方便地控制了实例个数,并...
    JonesCxy阅读 385评论 0 0
  • 注意min的类型 long long
    刘小小gogo阅读 336评论 0 0