完全神秘 - iOS方法在随机延迟后执行

时间:2012-01-20 02:35:34

标签: iphone ios random delay

我有以下代码的变体,由用户输入触发。

NSLog(@"WHY YOU iOS!!!");
[scanButton setSelected:YES];
[overlayImageView setImage:image];
[overlayView setHidden:YES];

事情是,上述例程以似乎随机的延迟从5秒到超过1分钟执行。

有时,它们根本不会执行,除了神秘的NSLog方法。如果我在NSLog行设置断点,它只是立即执行,我可以看到“为什么你。 ..“在控制台中打印出来。但是,即使调试器在没有错误或警告的情况下顺利通过以下三行,接下来的三行的效果也会在随机延迟或无限延迟之后发生。怎么了?怎么可能他们有随机延迟?

我怀疑由于我糟糕的程序设计或其他原因,Cocoa SDK的UI部分暂停,但即使在随机延迟期间,其他按钮和功能也可以正常工作,而setImage的效果会在47.2秒内突然发生。 iOS或者我有什么问题?

让我感到困惑的是,如果图像参数(UIImage *)来自不同的来源,上述确切的例程可以毫无延迟地正常工作。如果是这种情况,我们可以将问题的原因归结为图像,但是,为什么scanButton和overlayView也会以相同的延迟响应,即使它们与图像无关?对我来说完全神秘。

1 个答案:

答案 0 :(得分:3)

我不知道最近会发生什么,因为您提供的代码几乎没有提示,但为什么你不尝试这样的事情:

dispatch_async(dispatch_get_main_queue(), ^{

        NSLog(@"WHY YOU iOS!!!");
        [scanButton setSelected:YES];
        [overlayImageView setImage:image];
        [overlayView setHidden:YES];

        [overlayImageView setNeedsDisplay];
        [overlayImageView setNeedsLayout];

        [scanButton setNeedsDisplay];
        [scanButton setNeedsLayout];

        [overlayView setNeedsDisplay];
        [overlayView setNeedsLayout];

});

基本上确保始终更新主线程中的de UI(如果您正在使用后台线程)并根据需要设置UI控件以进行重新绘制。