我有以下代码的变体,由用户输入触发。
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也会以相同的延迟响应,即使它们与图像无关?对我来说完全神秘。
答案 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控件以进行重新绘制。