美文网首页
ios单例的修改

ios单例的修改

作者: targeter | 来源:发表于2019-05-17 18:31 被阅读0次

OC创建单例的时候确保程序在运行周期的时候,只有一个实例对象,但如果想销毁或者修改单例时,我就不知道该怎么做了,下面是这个问题的说明

首先,我们先看下OC的单例典型写法

+(id)shareInstance{
     static dispatch_once_t onceToken;
      dispatch_once(&onceToken, ^{
      if(_instance == nil)
            _instance = [MyClass alloc] init]; 
    });
     return _instance;
}

先看下dispatch_once_t

dispatch_once_t的描述是typedef long dispatch_once_t;
Description A predicate for use with the dispatch_once function.

dispatch_once展开是

void
_dispatch_once(dispatch_once_t *predicate, dispatch_block_t block)
{
    if (DISPATCH_EXPECT(*predicate, ~0l) != ~0l) {
        dispatch_once(predicate, block);
    }
}
~0l 是 long 的0 取反也就是 一大堆1

关键所在就是这个&onceToken的值,.它默认为0,如果创建成功之后,它就会变成1,只有我们之后再置成0,GCD才会认为它从未执行过,我们就又创建了一次单例,下面是一种写法

1. 必须把static dispatch_once_t onceToken; 这个拿出函数体,成为全局
2. 开始写方法
+(void)attempDealloc{
    onceToken = 0; // 默认为0,如果创建成功之后,它就会变成1,只有我们之后再置成0,GCD才会认为它从未执行过,我们就又创建了一次单例shareInstance的时候,再次创建对象.
    [_instance release];
    _instance = nil;
 }

相关文章

  • 单例

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

  • ios单例的修改

    OC创建单例的时候确保程序在运行周期的时候,只有一个实例对象,但如果想销毁或者修改单例时,我就不知道该怎么做了,下...

  • iOS 单例模式

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

  • iOS开发 单例使用问题

    iOS开发 单例使用问题 iOS开发 单例使用问题

  • iOS开发 单例使用问题

    iOS开发 单例使用问题 iOS开发 单例使用问题

  • iOS 单例模式 or NSUserDefaults

    本文内容:iOS的单例模式NSUserDefaults的使用总结:iOS单例模式 and NSUserDefaul...

  • 单例模式

    1.属性值可修改的单例模式 2.属性值不可修改的单例模式 优缺点: 优点: 在单例模式中,活动的单例只有一个实例,...

  • 单例模式 Singleton Pattern

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

  • 2. bean生命周期管理

    默认以饿汉式单例方式管理bean 修改为懒汉式单例方式管理bean 修改为非单例方式管理bean 配置工厂类与创建...

  • 【设计模式】单例模式

    学习文章 iOS设计模式 - 单例 SwiftSingleton 原理图 说明 单例模式人人用过,严格的单例模式很...

网友评论

      本文标题:ios单例的修改

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