iOS主要知识总结--单例模式

作者: 奕十八 | 来源:发表于2016-07-18 11:18 被阅读68次

单例模式的实现

单例是一种很常见的模式,它的原理就是使程序运行过程中,某个类只有一个实例,无论以什么方式创建,都返回同一个实例化对象。它的具体实现代码如下所示:

@implementation WJTool

//提供一个static修饰的全局静态变量,这句代码保证了单例的生命周期是整个函数
static WJTool *_instance;

//alloc内部会调用这个方法
+(instancetype)allocWithZone:(struct _NSZone *)zone{
   //之前普遍的写法,但是并不能保证线程安全
    /*
    @synchronized (self) {
        if (_instance==nil) {
            _instance = [super allocWithZone:zone];
        }
    }   */

    //为了既能使创建实例的代码只执行一次,并且保证线程安全,这里使用GCD的一次性函数最好不过
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instance=[super allocWithZone:zone];
    });
    return _instance;
}

//一般情况下,工具类都会提供一个类方法来供外界调用
+(instancetype)shareTool{
    return [[self alloc]init];
}


//严谨起见,重写copyWithZone和MutableCopyWithZone方法
-(id)copyWithZone:(NSZone *)zone{
    return _instance;
}

-(id)mutableCopyWithZone:(NSZone *)zone{
    return _instance;
}

单例的简洁实现:

在开发中,为了提高编码效率,并且这个单例是自己在已知的情况下调用,可以采用简单的方法实现:

+(instancetype)shareTool
{
    static WJTool *_instance;

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{
        _instance = [[self alloc]init];
    });

    return _instance;
}
xcode.png

相关文章

  • iOS主要知识总结--单例模式

    单例模式的实现 单例是一种很常见的模式,它的原理就是使程序运行过程中,某个类只有一个实例,无论以什么方式创建,都返...

  • iOS 单例模式 or NSUserDefaults

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

  • 单例

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

  • iOS 单例模式

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

  • 谈一谈iOS单例模式

    这篇文章主要和大家谈一谈iOS中的单例模式,单例模式是一种常用的软件设计模式,想要深入了解iOS单例模式的朋友可以...

  • iOS中的单例模式

    iOS开发中常用到2中设计模式,分别是代理模式和单例模式,本文主要介绍下单例模式 单例模式的作用 可以保证在程序运...

  • iOS开发-单例模式

    iOS开发—单例模式 一、简单说明: 设计模式:多年软件开发,总结出来的一套经验、方法和工具 二、单例模式说明 (...

  • 单例模式 Singleton Pattern

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

  • 【设计模式】单例模式

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

  • iOS模式设计之--创建型:1、单例模式

    iOS模式设计之--1、单例模式

网友评论

    本文标题:iOS主要知识总结--单例模式

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