#import <Foundation/Foundation.h>
@interface JJUserManager : NSObject
+ (JJUserManager*)defaultManager;
@end
#import "JJUserManager.h"
@implementation JJUserManager
//单例模式对外的唯一接口,用到的dispatch_once函数在一个应用程序内只会执行一次,且dispatch_once能确保线程安全
+(JJUserManager *)defaultManager {
//单例类的静态实例对象,因对象需要唯一性,故只能是static类型
static JJUserManager *defaultManager = nil;
static dispatch_once_t single;
dispatch_once(&single, ^{
if(defaultManager == nil) {
defaultManager = [[self myAlloc] init];
}
});
return defaultManager;
}
#pragma mark - 覆盖创建代码,严格意义上的单例
+(instancetype)myAlloc{
return [super allocWithZone:nil];
}
//提示无法使用alloc创建,防止因为忘记等原因而使用alloc
+(instancetype)alloc {
NSAssert(0, @"这是一个单例对象,请使用+(JJUserManager *)defaultManager方法");
return nil;
}
+(instancetype)allocWithZone:(struct _NSZone *)zone {
return [self alloc];
}
+(instancetype)new {
return [self alloc];
}
-(id)copy {
NSLog(@"JJUserManager是一个单例对象,copy将不起任何作用");
return self;
}