IOS小技巧——如何使用GCD创建单例模式

步骤
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> 修饰局部变量:
 *局部变量的生命周期 跟 全局变量类似
 *但是不能改变作用域(只能在函数内存在,出了函数外引用不到)
 * 能保证局部变量永远只初始化依次,再程序运行过程中,永远只有一份内存
 */
}

你可能感兴趣的:(ios开发开发遇到的小技巧)