单例是整个工程中有且只有一个对象,作为单例不会有多个对象,单例对象也不会被提前释放,单例对象的生命周期与整个工程一致。
单例是一种设计模式。
作用:(1)共享的作用。如果一个model ,比如用户的信息,只会存在一次,而且被频繁的调用,单例展示真正的威力了。
(2)待补充
系统中常见的单例:
(1) NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
用于存储一些小型数据
(2)AppDelegate *delegate = (AppDelegate *) [UIApplication sharedApplication].delegate;
可以用于数据的共享
(3) NSFileManager *fileManager = [NSFileManager defaultManager];
文件管理器,是对文件和目录操作的对象
如何创建自己的单例呢?
第一种方法:
首先声明一个类
#import <Foundation/Foundation.h>
@interface Person : NSObject
+(Person *)sharePerson;
@end
//实现
#import "Person.h"
@implementation Person
static Person *person =nil;//被static修饰的只会初始化一次,并且一直持有初始化的值
+(Person *)sharePerson{
@synchronized(self)//@synchronized防止多个线程同时访问
{
if (person ==nil) {
person = [[Personalloc]init];
}
}
returnperson;
}
@end
#import "Person.h"
@implementation Person
static Person *person =nil;//被static修饰的只会初始化一次,并且一直持有初始化的值
+(Person *)sharePerson{
staticdispatch_once_t onceToken;//是一种多线程技术,这个是只执行一次,而且还是线程安全的
dispatch_once(&onceToken, ^{
if (person ==nil) {
person = [[Personalloc]init];
}
});
return person;
}
//温馨提示,一般单例都会重写init()方法,在进行一些初始化的工作