步骤
1.建一个全局的变量
2.在allocWithZone: 方法中拦截内存的分配,并在方法内部加线程锁,防止多个线程同时加载方法
3.在新建一个share方法,方便外界分辨
1.ARC
@interface HMDataTool : NSObject
+ (instancetype)sharedDataTool;
@end
@implementation HMDataTool
// 用来保存唯一的单例对象
static id _instace;
// 为什么调用allocWithZone:方法而不调用alloc方法呢 ??
// 因为调用alloc方法,alloc方法实质上是调用allWihtZone:方法
+ (id)allocWithZone:(struct _NSZone *)zone
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_instace = [super allocWithZone:zone];
});
return _instace;
}
+ (instancetype)sharedDataTool
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_instace = [[self alloc] init];
});
return _instace;
}
- (id)copyWithZone:(NSZone *)zone
{
return _instace;
}
@end
一些小知识补充
1.Static关键字的作用:{
// 加上了static 关键字,这个全局变量只能在该文件中使用,不能用extern(引用某个全局变量(并非定义))引用,以后声明全局变量,尽量用static
static id _person;
/*
static :修饰变量
1> 修饰全局变量
*全局变量的作用域仅限于当前文件内部
2> 修饰局部变量:
*局部变量的生命周期 跟 全局变量类似
*但是不能改变作用域(只能在函数内存在,出了函数外引用不到)
* 能保证局部变量永远只初始化依次,再程序运行过程中,永远只有一份内存
*/
}