我在新线程中调用setNeedsDisplay
方法,但我的视图中没有看到任何更改。在新线程中调用setNeedsDisplay
后,我该怎么做才能看到我的所有更改?
答案 0 :(得分:7)
您无法在后台线程上更新用户界面。在后台主题中,更改
[object setNeedsDisplay];
到
[object performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntilDone:NO];
答案 1 :(得分:1)
必须在主线程上进行涉及UI的任何更新。通常,后台线程用于时间密集型任务,例如下载文件,解析数据等......
您的主要线程负责更新用户界面并响应用户事件和操作。这是我们拥有后台线程,管理内存使用和提高性能的主要原因,通过保持主线程尽可能自由地响应用户,而时间密集型任务(通常会阻塞主线程)发生在背景
在后台线程上处理完所有必要的数据和信息后,必须根据数据提交对UI的任何更改,方法是将其发送到主线程:
dispatch_async(dispatch_get_main_queue(), ^{
//do UI stuff
});
调度主线程的另一种方法如下:
[self performSelectorOnMainThread:@selector(doUIStuff:) withObject:stuff waitUntilDone:NO];