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使用的初衷的。

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

作者:HappyCoco
链接:http://www.jianshu.com/p/82ba1af6bbdc

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

推荐阅读更多精彩内容

  • 在iOS中,单例模式是比较常用的一种模式,保证相关代码只会执行一次,但有时候会有一种场景,需要销毁单例进行重建。 ...
    HappyCoco阅读 13,140评论 10 17
  • 单例模式 什么是单例模式? 单例模式想一个大独裁者,他规定在他的国度里面,所有数据的访问和请求都得经过他,甚至你要...
    GitHubPorter阅读 1,208评论 0 4
  • .一.进程 进程:是指在系统中正在运行的一个应用程序,每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空...
    IIronMan阅读 4,565评论 1 33
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,281评论 30 472
  • 贺鹏浩 “如果再回到从前,所有一切重演,我是否会明白生活重点,不怕挫折打击,没有空虚埋怨,让我看得更远……” 或许...
    爱心驿站阅读 678评论 0 1