实现单例类

2017-11-15  本文已影响6人  Vijay_

注意静态方法不能调用对象属性 所以要把单例存在静态变量中

//.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;
}
上一篇 下一篇

猜你喜欢

热点阅读