iOS中的单例模式如何销毁重建

在iOS中,单例模式是比较常用的一种模式,保证相关代码只会执行一次,但有时候会有一种场景,需要销毁单例进行重建。

如果不采用GCD提供的dispatch_once方法,需要加锁操作,是比较耗性能的。

那么这个时候如何继续采用dispatch_once方法?

dispatch_once_t的描述是:


typedef long dispatch_once_t;

dispatch_once在判断是否需要执行的关键语句:


if(DISPATCH_EXPECT(*predicate, ~0l) != ~0l) {

dispatch_once_f(predicate, context, function);

}

可以了解到 dispatch_once_t参数的初始值就是0l,只需要重置dispatch_once_t参数及实例参数,具体代码如下:


static SpTest *sInstance = nil;

static dispatch_once_t onceToken;

+ (instancetype)sharedManager

{

  dispatch_once(&onceToken, ^{

    sInstance= [[self alloc] init];;

    NSLog(@"dispatch once");

});

  return sInstance;

}

+ (void)tearDown{

  sInstance=nil;

  onceToken=0l;

}

回过头来想想,其实这样实现是一种比较粗陋的方式,需要考虑在销毁的同时实例的使用状况等,其实是违背dispatch_once使用的初衷的。

不排除真的有这种单例需要销毁的场景,但多数需要销毁的单例实际上可能不适用于单例这种模式,可能需要重新考虑架构设计问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 单例模式 什么是单例模式? 单例模式想一个大独裁者,他规定在他的国度里面,所有数据的访问和请求都得经过他,甚至你要...
    GitHubPorter阅读 1,208评论 0 4
  • @WilliamAlex大叔 前言 目前流行的社交APP中都离不开单例的使用,我们来举个例子哈,比如现在流行的"糗...
    Alexander阅读 1,954评论 6 28
  • 在iOS中,单例模式是比较常用的一种模式,保证相关代码只会执行一次,但有时候会有一种场景,需要销毁单例进行重建。 ...
    ShanJiJi阅读 3,178评论 0 3
  • 单例模式(SingletonPattern)一般被认为是最简单、最易理解的设计模式,也因为它的简洁易懂,是项目中最...
    成热了阅读 4,325评论 4 34
  • “二呀么二郎山,高呀么高万丈”,现在我站在川藏线第一个标志性的隧道前,或许是天气的原因,云山雾罩间,二郎山青翠有余...
    一个人的细水长流gsy阅读 610评论 0 1