美文网首页
可退出销毁的单例

可退出销毁的单例

作者: 每日总结 | 来源:发表于2018-07-18 18:05 被阅读125次

一般单例的模式

static UserInfo *_user = nil;
//创建,登录时进行初始化
+ (instancetype)shareInstance{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        if (_user == nil) {
            _user = [[UserInfo alloc] init];
        }
    });
    
    return _user;
}

销毁的处理

//退出时进行赋空
+ (void)destroySelf{
    _user = nil;
}

这是我最开始的写法,但是实际运行的时候发现程序每次登录退出之后,再次登录时就会报错
后来发现是再次登录时没有走dispatch_once中的方法。
一番百度后发现,使用dispatch_once是为了多线程下也能保证只创建一个实例,但实际上dispatch_once的作用是保证block中的方法只被执行一次,所以在我将单例销毁之后,他永远都只能是nil了。

要解决这个问题,我们只能换一种方法去保证线程安全。

修改创建方法

使用线程锁

+ (instancetype)shareInstance{
    @synchronized(self){
        if (_user == nil) {
            _user = [[UserInfo alloc] init];
        }
    }
    return _user;
}

相关文章

  • 可退出销毁的单例

    一般单例的模式 销毁的处理 这是我最开始的写法,但是实际运行的时候发现程序每次登录退出之后,再次登录时就会报错后来...

  • 8. 单例

    单例 1、GCD方式创建单例 2、互斥锁方式 销毁

  • iOS 单例模式 - 单例对象销毁【@synchronized】

    单例对象的创建方式 单例.h 文件的实现 单例.m 文件的实现 单例对象的销毁【@synchronized创建方式...

  • iOS 单例模式 - 单例对象销毁【GCD】

    单例对象的创建方式 单例.h 文件的实现 单例的.m 文件的实现 单例对象的销毁【GCD创建的方式】 使用单例对象...

  • 单例的销毁

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

  • iOS 单例的创建、销毁、继承(最全单例内容)

    目录 一、常见的单例及可能存在的问题 二、完善的单例 三、可继承的单例 四、单例的销毁 前言 你是不是觉得这是一个...

  • Android - 常见内存泄漏

    单例 单例静态对象持有activity引用,且因静态对象生命周期比activity还长,当act被销毁时,单例中的...

  • 0x003 单例模式 -- Singleton Pattern

    单例模式 -- Singleton Pattern 为了避免一个全局使用的类重复的销毁和创建 一、 最简单的单例:...

  • 单例设计模式

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

  • iOS单例的创建与销毁

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

网友评论

      本文标题:可退出销毁的单例

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