单例是类只允许创建单件对象,即这些类在当前进程中的唯一实例。
不使用GCD
#import "ServiceManager.h"
static ServiceManager *defaultManager;
@implementation ServiceManager
+(ServiceManager *)defaultManager{
if(!defaultManager)
defaultManager=[[self allocWithZone:NULL] init];
return defaultManager;
}
@end
@interface Teacher:NSObeject
+ (Teacher *)getInstace;
@end
static Teacher *teacher = nil;
@implementation Teacher
+ (Teacher *)getInstance
{
if (teacher == nil) {
teacher = [[Teacher alloc]init];
}
return teacher;
}
//单例:应用里面的唯一用户,游戏里面的主角,特点:唯一,全局,方便获取
//单例是非常好用的传值和存值的方法
//单例的获取
+ (Person *)heightPerson;
+ (Person *)heightPerson
{ //保证使用时初始化一次,并保证唯一
//建立静态对象,置为nil
static Person *person = nil;
if (person == nil) {
//保证不释放
person = [[Person alloc]init];
//
}
return person;
}
使用GCD
#import "ServiceManager.h"
@implementation ServiceManager
+(ServiceManager *)sharedManager{
static dispatch_once_t predicate;
static ServiceManager * sharedManager;
dispatch_once(&predicate, ^{
sharedManager=[[ServiceManager alloc] init];
});
return sharedManager;
}
@end
@implementation ShatedInstance {
static dispatch_onece_t predicate;
static SharedInstace *sharedInstance;
dispatch_once(&predicate, ^{
sharedInstance = [SharedManager alloc]init];
});
return sharedInstance;
}
@end
+ (UserNameSington *)shareSaveName;
static UserNameSington * _userNameInfor = nil;
@implementation UserNameSington
+ (UserNameSington *)shareSaveName
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_userNameInfor = [[UserNameSington alloc]init];
_userNameInfor.dataString = [[NSMutableDictionary alloc]init];
});
return _userNameInfor;
}
@end
dispatch_once这个函数, 它可以保证整个应用程序生命周期中某段代码只被执行一次!