美文网首页iOS科普小讲堂
OC创建一个严谨的单例类

OC创建一个严谨的单例类

作者: 执笔时光er | 来源:发表于2020-04-01 11:10 被阅读0次

单例:顾名思义,内存中只有单独一份的实例。
要实现严谨的真正意义的上的单例,就要把所有的创建对象的方式都统一管理起来,只返回内存中唯一的位置,代码如下:

@interface CQSQLiteUtil : NSObject
//提供的唯一创建接口
+(instancetype)shareInstance;
@end
#import "CQSQLiteUtil.h"
//内存中的唯一对象
static CQSQLiteUtil * _instance;
//接受Copy协议和MutableCopy协议,管理copy和mutableCopy
@interface CQSQLiteUtil ()<NSCopying,NSMutableCopying>
@end
@implementation CQSQLiteUtil

+(instancetype)shareInstance{
    return [[self alloc]init];
}

//当调用alloc的时候会调用allocWithZone
+(instancetype)allocWithZone:(struct _NSZone *)zone{
    //在alloc的总接口限制创建的操作
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instance = [super allocWithZone:zone];
    });
    return _instance;
}
//限制Copy操作创建的对象
- (nonnull id)copyWithZone:(nullable NSZone *)zone {
    return _instance;
}
//限制MutableCopy操作创建的对象
- (nonnull id)mutableCopyWithZone:(nullable NSZone *)zone {
    return _instance;
}
@end

另外,再附记一个单例类的宏定义

//.h定义替换
#define SingletonH(name) +(instancetype)share##name;

//.m定义替换
#define SingletonM(name) static id _instance;\
+(instancetype)allocWithZone:(struct _NSZone *)zone\
{\
static dispatch_once_t onceToken;\
dispatch_once(&onceToken, ^{\
_instance = [super allocWithZone:zone];\
});\
\
return _instance;\
}\
\
+(instancetype)share##name\
{\
return [[self alloc]init];\
}\
\
-(id)copyWithZone:(NSZone *)zone\
{\
return _instance;\
}\
\
-(id)mutableCopyWithZone:(NSZone *)zone\
{\
return _instance;\
}

这里有两个宏定义,分别是在.h文件和.m文件进行使用替换的。

我曾执笔雕刻时光,奈何良辰难书过往。

相关文章

  • OC创建一个严谨的单例类

    单例:顾名思义,内存中只有单独一份的实例。要实现严谨的真正意义的上的单例,就要把所有的创建对象的方式都统一管理起来...

  • iOS - 单例创建

    Swift创建单例 代码如下:Swift5 对应OC创建单例

  • 单例类的严谨写法

    单例类的简单实现 .h文件 .m文件 这样就创建了一个用户单例类,但是这样做的不严谨处在于,如果用户非要用[[Us...

  • iOS Swift中如何创建单例

    单例就是该类在系统中只有一个实例,对比一下OC的单例创建方式来看一下Swift的单例是如何写的。 OC中的单例是这...

  • 单例模式

    一、定义与特点 单例模式的特点 单例类只有一个实例对象 该单例对象必须由单例类自行创建 单例类对外提供一个访问该单...

  • 单例模式

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

  • 第8章 使用RecyclerView显示列表

    单例与数据集中存储 单例是特殊的Java类,在创建实例时,一个单例类仅允许创建一个实例。应用能在内存里活多久,单例...

  • 设计模式之单例模式

    单例模式 单例模式用来创建全局唯一的对象。一个类只允许创建一个对象(或者叫实例),那这个类就是一个单例类,这种设计...

  • 单例模式

    1. 什么是单例模式? 创建单例类的方法叫单例模式. 单例类, 就是只能产生一个对象的类. 2. 为什么使用单例模...

  • 设计模式之单例模式

    1.单例模式 单例模式用来创建全局唯一的对象。一个类只允许创建一个对象(或者叫实例),那这个类就是一个单例类,这种...

网友评论

    本文标题:OC创建一个严谨的单例类

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