IOS单例模式
单例模式
可以保证在程序运行过程中,一个类只有一个实例,而且该实例易于供外界访问 (eg:音乐播放器,多个控制器都播放同一首音乐,但是这个音乐只加载一次)
[UIApplication sharedApplication];就是一种单例模式
设计单例模式(一般设计成类方法)
重写+ (id)allocWithZone:(struct _NSZone *)zone 方法,因为alloc的底层调用是调用该方法
+ (id)allocWithZone:(struct _NSZone *)zone
{
// 定义一份变量(整个程序运行过程中只有一份)而且allocWithZone方法需要返回一值
static id instance = nil;
// 里面的代码永远只执行一次
static dispatch_once_t onceTonken;
dispatch_once(&onceTonken, ^{
instance = [super allocWithZone:zone];
});
// 返回对象
return instance;
}
// 定义一份变量(整个程序运行过程中只有一份)而且allocWithZone方法需要返回一值
static id instance = nil;
// 里面的代码永远只执行一次
static dispatch_once_t onceTonken;
dispatch_once(&onceTonken, ^{
instance = [super allocWithZone:zone];
});
// 返回对象
return instance;
}
重写init方法
static id _instance;
- (id)init
{
if (self = [super init]) {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
// 在这里面写只需要初始化一次的数据
_instance = [[self alloc] init];
});
}
return self;
}
还有。。。。。。。。
block内部只能改变__block的成员变量,其他变量在__block内部无法改变
单例模式:
1.永远只分配一块内存来创建对象
2.提供一个类方法,返回内部唯一的一个对象(一个实例)
3.最好保证init方法也只初始化一次