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:))完美答案,就是这样。