什么是单例模式
单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
实现单例模式的三种方法
+(instacetype)sharedManager{
static User *user = nil;
static dispatch_once_t predicate;
dispatch_once(&predicate,^{
user = [[User alloc] init];
});
return user;
}
+(instacetype)sharedManager{
static User *user = nil;
if(user==nil){
user = [[User alloc]init];
}
return user;
}
+(void)initialize{
static User *user = nil;
if(self == [User class])
user = [[User alloc]init];
}
}
编写严格的单例
static User *user = nil;
+ (instacetype)sharedManager{
static dispatch_once_t predicate;
dispatch_once(&predicate,^{
user = (User *)@"User";
user = [[User alloc] init];
});
NSString * classString = NSStringFromClass([self class]);
if([classString isEqualToString:"User"] == NO){
NSParameterAssert(nil);
}
return user;
}
- (instacetype)init {
NSString * string = (NSString *)user;
if([string isKindOfClass:[NSString class]] == YES && [string isEqualToString:"User"]){
self = [super init];
if (self){
NSString * classString = NSStringFromClass([self class]);
if([classString isEqualToString:"User"] == NO){
NSParameterAssert(nil);
}
}
return self;
}else{
return nil;
}
}