iOS单例引发奔溃

单例引发奔溃
dispatch_once(predicate, block); Thread 1: EXC_BREAKPOINT (code=1, subcode=0
代码如下,
首先, 调用了Querulous中的某个方法,[[Querulous sharedInstance] crenellated],这个时候已经开始调用了通过实例调用了 [instance th], 如果在 [instance th] 还没完成的情况下再调用[Querulous sharedInstance],就很容易出现卡死的状态,原理可以看看这篇文章滥用单例dispatch_once而造成的死锁问题

+(Querulous *)sharedInstance {
    static Querulous *instance;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance = [[Querulous alloc] init];
        instance.level = 3;
        [instance th];
    });
    return instance;
}

- (void)th
{
    NSTimer *timer = [NSTimer timerWithTimeInterval:0 target:self selector:@selector(hill) userInfo:nil repeats:YES];
    [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
    [timer fire];
    self.timer = timer;
}

- (void)hill
{
    if (self.trainers) {
        [self.timer invalidate];
        if ([self.trainers.allKeys containsObject:@"status"]) {
            
        }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容