0

我的代码中某处有一个非常讨厌的错误,这使应用程序无响应。它不会崩溃,它只会让一切都没有响应,我需要重新启动应用程序才能让它再次工作。

有不少人反映了这个问题,但我自己从来没有遇到过,这使得调试非常困难。我也无法重现。然而,今天早上我终于把它冻住了。这次我没有对应用程序做任何特别的事情。我点击“暂停程序执行”按钮以获取堆栈跟踪(见下文)我不太确定该堆栈跟踪是否与问题有关,但我会发布它。

你有过类似的问题吗?你如何调试这样的事情?任何建议将不胜感激!

谢谢

以下是我做的一些可能是原因的事情:

定时器

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 来移动它。

在此处输入图像描述

4

0 回答 0