美文网首页
单例的init死循环

单例的init死循环

作者: Gunks | 来源:发表于2020-03-29 22:19 被阅读0次

    https://my.oschina.net/nerozhao/blog/466731

    第一种,在init里面抛出异常,定义私有的init

    - (instancetype)init {
        [self doesNotRecognizeSelector:_cmd];
        return nil;
    }
    
    - (instancetype)initPrivate {
        self = [super init];
        if (self) {
        }
        return self;
    }
    
    + (instancetype)sharedInstance {
        static MySingleton *sharedInstance;
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            sharedInstance = [[self alloc] initPrivate];
        });
        return sharedInstance;
    }
    

    第二种,在init里面直接返回单例

    - (instancetype)init {
        return [[self class] sharedInstance];
    }
    
    - (instancetype)initPrivate {
        self = [super init];
        if (self) {
        }
        return self;
    }
    
    + (instancetype)sharedInstance {
        static MySingleton2 *sharedInstance;
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            sharedInstance = [[self alloc] initPrivate];
        });
        return sharedInstance;
    }
    

    个人比较倾向于第二种

    相关文章

      网友评论

          本文标题:单例的init死循环

          本文链接:https://www.haomeiwen.com/subject/beepuhtx.html