我在iOS 7的iPhone上尝试了我的应用程序,除了一件事,一切都很完美。在iOS 6版本上,当我执行以下代码时,加载视图(带有activityindicator)出现并在加载结束时消失。在iOS 7上,加载期间视图根本不显示。
self.loadingView.alpha = 1.0;
[self performSelector:@selector(accessServices) withObject:nil afterDelay:0.0f];
AccessServices方法:
- (void)accessServices {
// Getting JSON stuff
// The code is OK, I just don't copy/paste it here
self.loadingView.alpha = 0.0;
}
会发生什么?这是iOS 7的错误吗?
答案 0 :(得分:4)
我不希望上述代码的行为发生变化,但我并不感到意外,因为它可能不会像你期望的那样工作。如果您在主队列上执行JSON操作,则代码将依赖于UI更新发生时的特性,而不是使其显式化。
您可能希望将JSON代码显式调度到后台队列,然后将最终的UI更新分发回主队列。这样的标准模式是:
self.loadingView.alpha = 1.0;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Getting JSON stuff
// The code is OK, I just don't copy/paste it here
dispatch_async(dispatch_get_main_queue(), ^{
self.loadingView.alpha = 0.0;
});
});
您可以使用GCD(如上所述)或操作队列,或其他任何方式。但是这个想法是相同的,UI更新应该发生在主队列上,但是任何远程计算成本高或者速度慢的东西都应该在后台队列上发生。
无论iOS版本如何,此模式都应该有效。