单例特性:
1.只初始化一次且内存唯一(不管创建多少次,永远都是第一次创建的对象)
2.不释放,第一次创建成功之后,直到程序退出,系统才会回收内存
那具体怎么创建单例呢?
2.创建个ShareInstance类(继承于NSObject)在.m里定义单例类
// 设置静态变量(静态区只初始化一次,再走就不用初始化了),作用域范围:如果在{}外面就作用于整个类
static ShareInstance *share = nil;
@implementation ShareInstance
// 避免初始化和分配内存(alloc)多次调用,通过类方法创建对象,因为类方法只能类才能调用
+(ShareInstance *)shareInstance
{
#warning 单例安全(如果同时调用这个类时):第一种方法:
// @synchronized(self){
// if (!share ) {//如果为空,就初始化
// share = [[ShareInstance alloc] init];
// //对字典,数组,集合等容器类型的对象在.h里声明了.,就必须在.m里的初始化方法里对这个容器进行初始化
// share.array = [NSMutableArray array];
// }
// return share;
// }
//}
#warning 第二种:
static dispatch_once_t once;
dispatch_once(&once, ^{
share = [[ShareInstance alloc] init];
});
return share;
}
@end
2.在.h里声明属性
@interface ShareInstance : NSObject
@property(nonatomic,assign)NSInteger loginState;// 登录状态,默认值0
@property(nonatomic,retain)NSMutableArray *array;
@property(nonatomic,retain)NSString *name;
+(ShareInstance *)shareInstance;
@end
3.在Appdelegate.m里创建对象,然后赋值
ShareInstance *share = [ShareInstance shareInstance];
share.loginState = 0;
share.name = @"登录";
NSArray *arr = [NSArray arrayWithObjects:@"1",@"2",@"3", nil];
[share.array addObjectsFromArray:arr];
4.在mainViewController.m里取值
// 获得对象,把值取出
ShareInstance *share = [ShareInstance shareInstance];
NSLog(@"share = %@",share.name);