IOS刚冻结

时间:2013-04-03 06:34:41

标签: ios objective-c queue grand-central-dispatch

我的代码中有一个非常讨厌的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来移动它。

enter image description here

0 个答案:

没有答案