我的代码中有一个非常讨厌的bugg,这使得应用程序无响应。它没有崩溃,只是让一切都没有响应,我需要重新启动应用程序才能让它再次运行。
有很多人报告了这个问题,但我自己从未遇到过这种情况,这使得调试变得非常困难。我也无法重现它。 然而,今天早上我终于冻结了。这次我没有对应用做任何特别的事情。我按下“暂停程序执行”按钮以获得堆栈跟踪(见下文) 我不太确定堆栈跟踪是否与问题有关,但我会发布它。
你有类似的问题吗?你如何调试这样的东西? 任何建议将受到高度赞赏!
由于
我做的一些事情可能是原因:
定时器
self.turnLefttimer = [NSTimer timerWithTimeInterval:1.0f target:self selector:@selector(timerUpdate) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:self.turnLefttimer forMode:NSDefaultRunLoopMode];
大量的UIAnimations:
[UIView animateWithDuration:0.15f delay:0 options:UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionCurveEaseOut animations:^{
//Animations in here
} completion:nil];
游戏中心回调,并使用dispatch_async获取主队列。
- (void)getMatchData:(void(^)(NSData *matchData))block {
__weak GameViewController *weakSelf = self;
[self.gkMatch loadMatchDataWithCompletionHandler:^(NSData *matchData, NSError *error) {
//Handle data
if (block)
block(matchData);
}];
}
//In another function
[self getMatchData:^(NSData *matchData) {
dispatch_async(dispatch_get_main_queue(), ^{
//Do stuff with data
});
}];
经常使用块,操作队列和GCD,但请确保我不在dispatch_async块中使用dispatch_sync来创建死锁。
还可以在同一视图上使用UIPanGestureRecognizer和UITapGestureRecognizer来移动它。