【发布时间】:2014-05-15 14:48:46
【问题描述】:
我有一个奇怪的问题。
我正在运行以下代码,loginButton 是一个简单的UIViewController 中的IBOutlet UIButton
-(void)updateLayout{
NSDate *startColor = [NSDate date];
loginButton.backgroundColor = UIColorFromRGB([MSThemeManager getCoreColor]);
pageControl.backgroundColor =UIColorFromRGB([MSThemeManager getCoreColor]);
NSDate *methodFinishColor = [NSDate date];
NSTimeInterval executionTimeColor = [methodFinishColor timeIntervalSinceDate:startColor];
NSLog(@"Execution Time for getColorMethod: %f", executionTimeColor);
}
日志中提供的执行时间是非常正确的,所以getColorMethod没有问题,它也在很多不同的地方使用,没有任何问题:
2014-05-15 16:40:28.570 TnMC[9642:4007] Execution Time for getColorMethod: 0.000132
但具体而言,loginButton 和 pageControl 上的颜色更新很容易需要 10 到 20 秒,并且不会出现任何褪色。
注意:
- loginButton 上与颜色无关的其他 UI 更新(例如更改 titleLabel.text)在同一方法中是即时的
- 应用程序中没有同时进行其他处理
- 这一切都在主线程上,并且由于通知而调用updateLayout
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateLayout) name:nAppUpdateLayout object:nil];
有什么想法吗?
【问题讨论】:
-
确保您在主线程上调用代码。代码可能在 bg 线程上执行。此外,如果您使用 NSNotifications,请确保将它们发布在主线程上。
-
你好 danypata,在 dispatch_get_main_queue() 上调度成功了!谢谢 。没有意识到 NSURLDataSessionTask 作为默认行为在主线程上执行处理。如果你想让我选择你作为一个好的回应,你可以回答。
-
你好@Romain Dorange :))
标签: ios objective-c uikit uicolor iboutlet