美文网首页
iOS中的单例模式如何销毁重建

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

作者: MxlZlh | 来源:发表于2019-05-21 10:05 被阅读0次

在iOS中,单例模式是比较常用的一种模式,保证相关代码只会执行一次,但有时候会有一种场景,需要销毁单例进行重建。
如果不采用GCD提供的dispatch_once方法,需要加锁操作,是比较耗性能的。
那么这个时候如何继续采用dispatch_once方法?
dispatch_once_t的描述是:

typedef long dispatch_once_t;

GCD创建:dispatch_once中dispatch_once_t类型为typedef long
• onceToken= 0,线程执行dispatch_once的block中代码
• onceToken= -1,线程跳过dispatch_once的block中代码不执行
• onceToken= 其他值,线程被线程被阻塞,等待onceToken值改变
用途:限制创建,提供全局调用,节约资源和提高性能。参考
常见的应用场景:
• UIApplication
• NSNotificationCenter
• NSFileManager
• NSUserDefaults
• NSURLCache
• NSHTTPCookieStorage

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使用的初衷的。
不排除真的有这种单例需要销毁的场景,但多数需要销毁的单例实际上可能不适用于单例这种模式,可能需要重新考虑架构设计问题。

链接:https://www.jianshu.com/p/82ba1af6bbdc

相关文章

  • iOS 单例销毁重建

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

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

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

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

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

  • 单例模式 Singleton Pattern

    单例模式-菜鸟教程 iOS中的设计模式——单例(Singleton) iOS-单例模式写一次就够了 如何正确地写出...

  • iOS 单例模式

    关于单例模式的详解,看完这几篇,就完全了然了。iOS 单例模式iOS中的单例模式iOS单例的写法

  • 单例

    iOS单例模式iOS之单例模式初探iOS单例详解

  • iOS单例的创建与销毁

    c#iOS单例的创建与销毁 单例:单例模式使一个类只有一个实例.单例是在使用过程,保证全局有唯一的一个实例.这样,...

  • 单例的销毁

    单例设计模式是iOS开发中一种非常常用的设计模式,大家也都很熟悉了。这里要说的是单例的销毁。由于某些需求,比如某个...

  • 单例设计模式

    单例模式优点 单例模式在内存中只有一个实例,减少了内存开支。特别是一个对象需要频繁的创建、销毁时,而创建与销毁的性...

  • iOS单例模式容错处理

    ios 单例模式容错处理 1、单例模式的使用和问题解决 在ios开发的过程中,使用单例模式的场景非常多。系统也有很...

网友评论

      本文标题:iOS中的单例模式如何销毁重建

      本文链接:https://www.haomeiwen.com/subject/durlaqtx.html