iOS单例模式(SingletonPattern)

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

②优缺点
优点:为频繁访问的第三方工具提供了唯一的实例,从而节约系统资源,不用再频繁地创建和销毁对象,无疑提高了系统的性能。

缺点:不可过多的创建单例,因为单例从创建后到彻底关闭程序前都会一直存在,如果过多的创建单例无疑浪费系统资源和影响系统效率。

③代码实现
创建一个对象是先调用alloc方法分配对象内存,再调用init方法进行初始化,那么实现单例,重写allocWithZone:方法就可以了,用GCD的dispatch_once函数是比较简单的一种方式,因为有一个dispatch_once_t类型参数能保证只执行一次。


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

static dispatch_once_t onceToken;

static id instance;

dispatch_once(&onceToken, ^{

instance = [super allocWithZone:zone];

});

return instance;

}

④宏定义单例模式
如果多个类要实现单例模式,我们可以定义个一个头文件SingletonPattern.h,里面定义两个宏,分别是声明与实现。


#ifndef SingletonPattern_h

#define SingletonPattern_h

#define WD_SINGLETON_PATTERN_INTERFACE(name) +(instancetype)shared##name;

#define WD_SINGLETON_PATTERN_IMPLEMENTATION(name) +(instancetype)shared##name {\

return [[self alloc] init];\

}\

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

static dispatch_once_t onceToken;\

static id instance;\

dispatch_once(&onceToken, ^{\

instance = [super allocWithZone:zone];\

});\

return instance;\

}\

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

//return self;\

//}

#endif

实现单例,只要导入头文件"SingletonPattern.h",

在.h文件写WD_SINGLETON_PATTERN_INTERFACE(类名),

在.m文件写WD_SINGLETON_PATTERN_IMPLEMENTATION(类名),就可以了。

你可能感兴趣的:(iOS单例模式(SingletonPattern))