1.假如我用单例创建数据库对象,当我用数据里面的方法时必须用也只能用单例
来调用这个方法,保证其唯一性.而且它存在整个过程.存在在内存管理的全局
库,但是沙盒创建的特点是无规律的,我们每次的创建及寻找数据是很困难的.
而单例结解决这个问题
2.单例是你创建在哪个文件中它就整个过程都存在那个文件中而且是唯一存在
的.
3.我们创建对象有很多种.单例也是创建对象的一种,只是它特殊在它的唯一性,
我们可以将单例应用在用户是否登录的情况下等等
4.一旦它被设值了,那么在任何文件里他都是那个值.
创建单例
1.在.h文件中
单例返回一个对象
+ (Singleton *)shareSingleton;
再建立一个属性用于单例调用设值时用
@property (nonatomic, copy)NSString *str;
2.在.m文件中
+ (Singleton *)shareSingleton
{
第一种
static Singleton *single;
if (single == nil)
{
single =[[Singleton alloc] init];
}
第二种
通过oneToken是否执行过一次 保证当前这个对象只能被创建一次
static Singleton *single;
static dispatch_once_t oneToken;
dispatch_once(&oneToken,^{
single = [[Singleton alloc] init];
});
return single;
}
3.在其他文件中使用单例对象
[Singleton shareSingleton].str = @"你好";
NSLog(@"%@",[Singleton shareSingleton].str);
单例总结
1.下面都是用单例对象进行创建的
[UIScreen mainScreen];
[NSFileManager defaultManager];
[NSUserDefaults standardUserDefaults];
[NSBundle mainBundle];
2.系统为了确保某些对象在工程里唯一,使用单例创建对象,比如上面四个.
3.单例方法一般都是+号方法,返回值当前类型的对象,方法一般以一些关键字开
头,比如share,main,default,然后加上类名,基本上就是一个单例的方法
4.保存用户名的状态从头到尾的监视.
摘抄部分:
static MyClass *class = nil;
@implementation MyClass
+(MyClass *)sharedMyClass{
if (!class) {
[[self alloc] init];
}
returnclass;
}
@end
调试发现
MyClass *A = [[MyClass alloc] init];
NSLog(@"A:%@",A);
MyClass *B = [MyClass sharedMyClass];
NSLog(@"B:%@",B);
打印出的是
A:<MyClass: 0x6c72d30>
B:<MyClass: 0x6a87e60>
不是一个内存地址,也就是不是同一个实体