Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IOS只是冻结_Ios_Objective C_Queue_Grand Central Dispatch - Fatal编程技术网

IOS只是冻结

IOS只是冻结,ios,objective-c,queue,grand-central-dispatch,Ios,Objective C,Queue,Grand Central Dispatch,我的代码中有一个非常讨厌的bug,使应用程序没有响应。它没有崩溃,只是让一切都没有反应,我需要重新启动应用程序,让它重新工作 有相当多的人报告过这个问题,但我自己从未遇到过,这使得调试非常困难。我也不能复制它。 然而,今天早上我终于把它冻住了。这次我没有对这个应用做任何特别的事情。我点击“暂停程序执行”按钮获得堆栈跟踪(见下文) 我不太确定堆栈跟踪是否与问题有关,但我会发布它 你有过类似的问题吗?如何调试这样的东西? 如有任何建议,将不胜感激 谢谢 以下是我所做的几件可能是原因: 计时器 大量的

我的代码中有一个非常讨厌的bug,使应用程序没有响应。它没有崩溃,只是让一切都没有反应,我需要重新启动应用程序,让它重新工作

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

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

谢谢

以下是我所做的几件可能是原因:

计时器

大量的动画:

    [UIView animateWithDuration:0.15f delay:0 options:UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionCurveEaseOut animations:^{
         //Animations in here
     } completion:nil];
游戏中心回调,并使用dispatch\u 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,但请确保我没有在调度异步块中使用调度同步来创建死锁

还可以在同一视图上使用UIPangestureRecognitor和UIApgestureRecognitor来移动它


堆栈跟踪意味着您将向响应程序发出某种事件,例如当UIButton调用其目标上的选择器时。最后一个让它“冻结”的UI元素是什么?它关联的选择器是什么?这不是一个常规的“未识别的选择器发送到实例”吗?您在控制台中有关于异常的详细信息吗?好的,现在在您对该对象的调用中及其周围设置一些断点,看看它是否阻塞了主线程。动画从来不是原因,它们通常在专用队列上执行;NSTimer通常不会阻塞runloop,因为它们紧密集成在runloop中。看起来AH是通过某种委托方法向您回调的,您没有实现这种方法。不过,这不会“冻结”一个应用程序,这只是一个致命的例外。@Ben-G,是的,它是一个无法识别的选择器,但我宁愿诊断根本原因。我想应用程序确实崩溃了——当它作为发布版本运行时?
 - (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
        });
    }];