Ios UIKit问题-在IBOutlet项目上设置颜色需要花费大量时间

Ios UIKit问题-在IBOutlet项目上设置颜色需要花费大量时间,ios,objective-c,uikit,uicolor,iboutlet,Ios,Objective C,Uikit,Uicolor,Iboutlet,我有一个奇怪的问题 我正在运行以下代码,loginButton是一个简单的UIViewController中的ibui按钮 -(void)updateLayout{ NSDate *startColor = [NSDate date]; loginButton.backgroundColor = UIColorFromRGB([MSThemeManager getCoreColor]); pageControl.backgroundColor =UIColorFromRGB(

我有一个奇怪的问题

我正在运行以下代码,
loginButton
是一个简单的
UIViewController中的
ibui按钮

-(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更新,如更改
标题标签。文本
在同一方法中即时更新
-应用程序中没有同时进行的其他处理
-这都在主线程上,并且由于通知而调用了
updateLayout

   [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateLayout) name:nAppUpdateLayout object:nil];

有什么想法吗?

让我详细阐述一下这种问题,我相信很多正在学习iOS的开发人员都会遇到或将遇到这种问题

基本上,每当你做一些基本的UI更改,如背景色、文本颜色等,或者其他不需要大量计算且UI没有得到更新的UI更改时,你必须首先检查两件事(除了更改UI的代码的正确性)

  • 当您尝试更新/更改某些内容时,UI是否冻结

  • 如果您的UI没有冻结,它是否会更新,或者代码是否已执行

  • 如果第一点发生了,那么很明显你在主线程上做了很多工作,你必须把繁重的工作转移到后台线程上

    如果发生第二点,可能有两个原因。首先,您的代码是错误的,它从未被调用,或者代码是在后台线程上调用的

    为了确定代码是否在后台线程上执行,只需在更新代码的位置放置一个断点,并检查调试导航器以查看线程号,如果不是主线程,则在主线程上执行

    第二种判断代码是否在后台线程上的方法是……出其不意……可怕的崩溃


    另外,在后台执行UI代码的一个常见问题是使用
    NSNotification
    更新UI。经验法则:
    NSNotification
    与调用者发布在同一个线程上。

    确保在主线程上调用代码。代码可能是在bg线程上执行的。另外,如果您使用的是NSNotifications,请确保将它们发布在主线程上!谢谢未意识到NSURLDataSessionTask作为默认行为在主线程上执行处理。如果你想让我选择你作为最佳答案,你可以回答。你好@Romain Dorange:))完美答案,就是这样。