美文网首页
完整版单例

完整版单例

作者: MTZ_上善若水 | 来源:发表于2015-10-16 03:29 被阅读55次

单例是一种设计模式,通过一个类方法获取到的实例是唯一的,它就是个单例。

static类型的全局变量的值是存储到全局静态区,所有对象的同一个static类型的全局变量的指针指向同一块空间,所以当静态存储区里面的值被修改时,所有对象里面的指针所指向的这块空间的值都被改变,static类型的全局变量的值可以实现对象之间数据共享

写单例类方法的规则:一般是以sharedXXX、defaultXXX、currentXXX的格式来创建

static SingleCase* singleCase = nil;//先声明一个全局静态变量

+ (SingleCase *)sharedSingleCase {

    @synchronized(self) {

        if (singleCase == nil) {

            singleCase = [[super allocWithZone:NULL] init];

        }

    }

    return singleCase;

}

另外一种方法也是常用的一种方法是GCD里面的一套API

+ (SingleCase *)sharedSingleCase {

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        singleCase = [[super allocWithZone:NULL] init];

    });

    return singleCase;

}

模仿系统写一个自己的单例

void TZ_dispatch_once(dispatch_once_t *predicate, dispatch_block_t block) {

    if (*predicate == 0) {

        *predicate = 1;

        if (block) {

            block();

        }

    }

}

+ (SingleCase *)sharedSingleCase {

    @synchronized(self) {

        TZ_dispatch_once(onceToken, ^{

            singleCase = [[super allocWithZone:NULL] init];

        });

    }

    return singleCase;

}

完整版单例需要实现的方法

+ (instancetype)allocWithZone:(struct _NSZone *)zone {

    return [SingleCase sharedSingleCase];

}

下面两个方法需要采用协议 <NSCopying, NSMutableCopying>

- (id)copyWithZone:(NSZone *)zone {

    return [SingleCase sharedSingleCase];

}

- (id)mutableCopyWithZone:(NSZone *)zone {

    return [SingleCase sharedSingleCase];

}

- (instancetype)retain {

    return self;

}

- (oneway void)release {

}

- (instancetype)autorelease {

    return self;

}

- (NSUInteger)retainCount {

    return NSUIntegerMax;

}

相关文章

  • 设计模式

    史上最全设计模式导学目录(完整版) 单例模式(Singleton Pattern) 确保对象的唯一性——单例模式 ...

  • 完整版单例

    单例是一种设计模式,通过一个类方法获取到的实例是唯一的,它就是个单例。 static类型的全局变量的值是存储到全局...

  • Android设计模式总结

    单例模式:饿汉单例模式://饿汉单例模式 懒汉单例模式: Double CheckLock(DCL)实现单例 Bu...

  • IOS单例模式的底层原理

    单例介绍 本文源码下载地址 1.什么是单例 说到单例首先要提到单例模式,因为单例模式是单例存在的目的 单例模式是一...

  • 【设计模式】单例模式

    单例模式 常用单例模式: 懒汉单例模式: 静态内部类单例模式: Android Application 中使用单例模式:

  • 2020-11-02-Spring单例 vs. 单例模式

    Spring 单例不是 Java 单例。本文讨论 Spring 的单例与单例模式的区别。 前言 单例是 Sprin...

  • IOS学习笔记之单例

    单例介绍 1.什么是单例 说到单例首先要提到单例模式,因为单例模式是单例存在的目的 单例模式是一种常用的软件设计模...

  • OC - 单例模式

    导读: 一、什么是单例模式 二、单例的作用 三、常见的单例类 四、自定义单例类的方法 一、什么是单例模式 单例模式...

  • 单例

    单例 单例宏

  • 单例模式

    特点 单例类只有1个实例对象 该单例对象必须由单例类自行创建 单例类对外提供一个访问该单例的全局访问点 结构 单例...

网友评论

      本文标题:完整版单例

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