oc 单例模式

static Bee * sharesingleton = nil;

第一句定义一个静态的单例指针并初始化为空。首先单例模式就是要求类有唯一 一个实例并像外界提供返回这个实例创建的方法。为了保证实例的唯一性,创建出来的实例在内存中只有一个,因此用static修饰它,因为static修饰的变量程序生命周期最长且唯一。static修饰的变量一直贯穿于程序的始终,所以这个变量在内存中具有唯一性


+(Bee *)sharelstance

因为单例不能再创建其他对象,它只有一个实例对象,所以,实现类方法屏蔽对象方法,可以防止对象通过其他方法再次被创建破坏实例的唯一性。

{

if(sharesingleton == nil)

{

sharesingleton = [super allocWithZone:NULL] init];


}

这句if是先判断实例是否已经被创建,如果创建了就不再创建对象,否则,就创建一个实例对象。
因为单例模式就只有一个实例,如果不判断的话可能会出现多次调用类方法创建实例的情况这样单例就不唯一了。
最关键的一步应该是这个吧sharesingleton = [[super allocWithZone:NULL] init ];就是初始化一个实例给单例的指针。这个的写法的确有好多种,也可以写成这样sharesingleton = [[super alloc] init ];但是这样写会出现不安全的问题。解释如下:
使用alloc方法初始化一个类的实例的时候,默认是调用了 allocWithZone 的方法。于是覆盖allocWithZone方法的原因已经很明显了:为了保持单例类实例的唯一性,需要覆盖所有会生成新的实例的方法,如果有人初始化这个单例类的时候不走[[Class alloc] init] ,而是直接 allocWithZone, 那么这个单例就不再是单例了,所以必须把这个方法也堵上。因此这个sharesingleton = [[super allocWithZone:NULL] init ];写法使程序更健壮些。

  return sharesingleton:

}


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值