单利设计模式

一、单利设计模式。

考点:单例、恶汉式、懒汉式、线程、同并、同步函数、同步代码块、线程锁、效率 

1.懒汉模式

static MyGizmoClass *sharedGizmoManager = nil; 
+ (MyGizmoClass*)sharedManager

{

   if (sharedGizmoManager == nil)

   { 

      sharedGizmoManager = [[MyGizmoClass alloc] init];

   }

   return sharedGizmoManager;

} 

面试中,我们可能会经常碰到单例的问题,要求我们写一个单例的代码,所以啊这里我们最好要记住,哪怕是背也要背下来。可是面试官是考我们知道不知道单例问题吗?

NO,写完后(如果你写出来,写不出来,就直接走人吧),会问你,有什么问题吗?

回答必须是有的!没有他能问你啊???

当我们用多线程的获取单例实例的时候,看图吧还是

单利设计模式 - 所以王 - 王---
 

解决方法1:同步代码块。

static MyGizmoClass *sharedGizmoManager = nil; 
+ (MyGizmoClass*)sharedManager

{

   @synchronized(self)

  {

      if (sharedGizmoManager == nil)

      { 

          sharedGizmoManager = [[MyGizmoClass alloc] init];

       }

   }

   return sharedGizmoManager;

} 

可是大家发现,这和同步函数有区别吗?木有啊,这不还是一样要判断锁嘛,所以这是还有问题的,怎么解决?我们在synchronized外面加一层判断,判断sharedGizmoManager是否为空再看一下 

解决方法2:同步代码块+双层判断。

双重if()判断是否为空,提高效率,咋提高呢

当第一次t1进来的时候返回了一个sharedGizmoManager,其他线程进来后一上来不是判断的锁而是判断是否为空,是否有sharedGizmoManager,所以怎么样,问题就解决啦,面试官就搞定啦!O(_)O哈哈~

static MyGizmoClass *sharedGizmoManager = nil; 
+ (MyGizmoClass*)sharedManager

{

  if (sharedGizmoManager == nil)

    {

@synchronized(self)

   {

       if (sharedGizmoManager == nil)

       { 

           sharedGizmoManager = [[MyGizmoClass alloc] init];

        }

    }

}

    return sharedGizmoManager;

} 

如果面试官要是问这道题,一定要把能想到的都说出来,表现的时候到了啊 

2.饿汉模式

static MyGizmoClass *sharedGizmoManager =[[MyGizmoClass alloc] init];

+ (MyGizmoClass*)sharedManager

{

   return sharedGizmoManager;

} 

饿汉模式不存在安全隐患,可放心使用哦。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值