#pragma mark 创建单例的方法
//类名(即 +(SharedData *))
//id类型的话,外面使用的时候只知道是对象类型
//instancetype可以动态识别是哪一种对象类型
//开发者通常使用share 系统默认是default(即defaultData),一般还有standard
//起名习惯:share + 类名
+(instancetype)shareData;
@property(nonatomic,copy)NSString *useName;
//+(SharedData *)shareData;
//+(id)shareData;
/*
//------ 单例传值-----
先在第一个界面的点击事件中把值传给单例对象;
再在需要接收所传的值的那里接收单例对象传过来的值;
*/
(二)在.m文件里面
/*
static 保值作用
1,清零作用
2,保值作用(只会初始化一次)
3,隐藏功能
单例。单:唯一性。例:实例对象。即使⽤用某个类创建的对象是程
序中唯一的实例对象。注:通常每次使用alloc创建的是不同的对象。
如果一个类只能创建一个对象,称为单例类。单例类可以是工具类, 视图类,控制器类。
操作单例对象的变量(指针)存储在静态区,程序关闭后由系统自动回收。
单例对象存储在堆区,不释放,程序关闭后由系统自动回收。
变量和单例对象的⽣命周期与程序同步。
//单例:在静态区初始化一个对象,在这个程序结束之后 才会被释放
//第一次调用这个方法,单例对象就会被创建,之后不需要创建,直接使用就行了
//单例类声明的对象,在第一次初始化之后,就会在静态区存在,在程序结束之后才会被释放,不会第二次初始化
*/
//static SharedData *data = nil;//这句话也可以写在里面(如“key”)
+(instancetype)shareData
{
static SharedData *data = nil; //“key”
/*
//第一种
if (data == nil) {
data = [[SharedData alloc] init];
}
*/
/*
//第二种:dispatch_once代表同一时间内,只有一个线程可以访问这个类
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
if (!data) {
data = [SharedData new];
}
});
*/
//第三种:(锁定data对象,保证data创建过程的原子性)
@synchronized(self) {
if (!data) {
data = [[SharedData alloc] init];
}
}
return data;
}