我收到了我正在使用的应用的错误日志,该应用遇到间歇性崩溃,通常是在工作30分钟以上之后。日志中收到的异常的类型为EXC_CRASH(SIGABRT)。我自己没有经历过崩溃,也没有访问有问题的设备的权限,因此,在尝试复制问题时,我只需要保存日志即可。
符号化日志后,似乎罪魁祸首是以下代码位(错误日志中线程0的位置10)
if(oldStatus != _connected) {
for(id<OnlineStatusSubscriber> subscriber in _subscribers) {
[subscriber onlineStatus:self statusChangedTo:_connected];
}
}
具体
for(id<OnlineStatusSubscriber> subscriber in _subscribers) {
如果要相信行号。
我无法弄清楚这里可能出了什么问题。
用户在类的初始化中初始化
_subscribers = [NSMutableArray new];
,此后再也不会设置为零。
通过这种方法,侦听器被添加到_subscribers
- (void)subscribe:(id<OnlineStatusSubscriber>)subscriber {
[_subscribers addObject:subscriber];
}
,并且每个调用该方法的类都使用OnlineStatusSubscriber接口并实现onlineStatus:statusChangedTo:方法。
我已将错误日志添加到pastebin:https://pastebin.com/Ux0XRm15
以及相关的类:https://pastebin.com/NjGcaNxp(其中令人讨厌的行是第73行)
答案 0 :(得分:0)
没关系。我以某种方式错过了我正在退订的其中一个onlineStatus:statusChangedTo:调用。它甚至不是多线程,而是直接路径。太蠢了。
通过遍历[_subscribers copy]而不是_subscribers来解决问题。