两种单例的实现方式

在IOS中单例设计模式有很广泛的用途,它保证一个类只有一个实例,并提供一个访问它的全局访问点,一个app只有一个实列,也就是说他一直存在,除非你手动置空,在内存里面也只会用到一个地址.

苹果官方提供了很多单列对象供用户使用,例如:

UIApplication类提供了 +sharedApplication 方法创建和获取UIApplication单例.

NSBundle类提供了 +mainBundle 方法获取NSBundle单例.

NSFileManager类提供了 +defaultManager 方法创建和获得NSFileManager单例(使用代理时需要调用 -init 实例化方法来实例化一个新的对象).

NSUserDefaults类提供了 +defaultUserDefaults 方法去创建和获取NSUserDefaults单例.

NSNotificationCenter类提供了 +defaultCenter 方法创建和获取NSNotificationCenter单例.

我所知道的单例有两种实现方式,根据线程安全的实现来区分的话,一种是使用@synchronized,另一种是使用GCD的dispatch_once函数。

synchronized线程锁的方式


+ (instancetype)sharedPersonSync{

staticidinstance;

@synchronized(self) {

if (instance ==nil) {

instance = [[selfalloc] init];}

}

returninstance;

}

复制代码

GCD方式


+ (instancetype)sharedPerson {

static dispatch_once_tonceToken;

dispatch_once(&onceToken, ^{

instance = [[self alloc] init];

});

returninstance;

}

复制代码

Warning:单例虽然可以达到共享传值的目的,但非必要的情况下最好不要使用单例的方式实例化对象.

转载于:https://juejin.im/post/5b9634cce51d450e9c5537db

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值