注意静态方法不能调用对象属性 所以要把单例存在静态变量中
//.m文件
static VJSignle* signle_instance = nil;
//在app启动时调用
+(void)load{
signle_instance = [[VJSignle alloc] init];;
}
+(instancetype)sharedSignle{
return signle_instance;
}
+ (instancetype)alloc{
if (signle_instance) {
//抛异常
[[NSException exceptionWithName:@"SignleInstanceError" reason:@"only alloc once" userInfo:nil] raise];
}
return [super alloc];
}
//.h文件
+(instancetype)sharedSignle;
更高效的单例
@implementation XXClass
+ (id)sharedInstance {
static XXClass *sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[self alloc] init];
});
return sharedInstance;
}







网友评论