美文网首页
iOS 单例模式的写法

iOS 单例模式的写法

作者: 高压锅炖熊 | 来源:发表于2016-04-04 23:42 被阅读144次

单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。意思只有一个实例。

错误写法(非线程安全)

#import "DataSource.h"
@implementation DataSource
+ (DataSource *)shareDataSource {
    static DataSource *dataSource;
    if (dataSource == nil) {
        dataSource = [[DataSource alloc] init];
    }
    return dataSource;
}

正确写法

#import "DataSource.h"
@implementation DataSource
+ (DataSource *)shareDataSource {
    static DataSource *dataSource;
    @synchronized(self){
        if (dataSource == nil) {
            dataSource = [[DataSource alloc] init];
        }
    }
    return dataSource;
}

synchronized 只是保证只有同一时间只有一个操作对当前 self的操作。

GCD(推荐)

+(DataSource *)shareDataSource {
    
    static DataSource *dataSource = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        dataSource = [DataSource new];
    });
    return dataSource;
}

dispatch_once中代码只执行一次,它是同步方法,比 @synchronized快许多

普通写法

#import "DataSource.h"
static DataSource *dataSource;
@implementation DataSource
+ (DataSource *)shareDataSource {
    
    if (!dataSource) {
        dataSource = [[DataSource allocWithZone:NULL] init];
    }
    return dataSource;
}

严格单例(官方)

尽管我们很少会使用到严格的单例模式,但当真的需要的时候,还是可以实现的。
苹果官方文档提供了一个严格单例的实现(传送门)。 其重载了allocWithZone:, copyWithZone, retain, retainCount, release, autorelease。使得这个实现变得无比复杂而难以理解和控制。

相关文章

  • iOS 单例模式

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

  • 单例的2种写法

    单例模式是iOS开发中最常用的设计模式,iOS的单例模式有两种官方写法,如下: 1,常用写法 import "Se...

  • iOS-两种单例模式的实现

    单例模式是开发中最常用的写法之一,创建一个单例很多办法,iOS的单例模式有两种官方写法,如下: 不使用GCD 某些...

  • 设计模式之单例模式详解

    设计模式之单例模式详解 单例模式写法大全,也许有你不知道的写法 导航 引言 什么是单例? 单例模式作用 单例模式的...

  • 单例

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

  • 第03条 用私有构造方法或者枚举类型强化Singleton属性

    单例模式最佳写法1 - 双重校验锁 单例模式最佳写法2 - 静态内部类

  • 单例模式

    单例模式的写法

  • Kotlin中的单例模式与Java对比

    目前java中的单例模式有多种写法,kotlin中的写法更多一点,本篇会总结全部的到单例模式写法。 一、懒人写法(...

  • iOS单例模式的正确写法

    单例模式很常见,但是,能真正把单利模式写对的却很少。在iOS中,一般我们都是用官方推荐的写法来写单例: URLMa...

  • iOS 单例模式的写法

    单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。意思只有一个实例。 错误写法(非线程安全...

网友评论

      本文标题:iOS 单例模式的写法

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