objective-c – 在后台线程上创建UIView可以吗?
栏目: Objective-C · 发布时间: 6年前
内容简介:代码日志版权声明:翻译自:http://stackoverflow.com/questions/11122957/is-it-ok-to-create-a-uiview-on-a-background-thread
我知道UIView不是线程安全的,所以我不能在后台线程上添加视图,解决这个问题是否可以在后台线程上创建一个UIView,然后将其添加到主线程?
注意:在主线程上不这样做的原因是因为我的实际代码更复杂,因此需要一段时间来创建所有的视图并填充值.当我这样做时,我不希望UI变得不响应,所以我试图解决这个问题.
例如..
-(void)addLabel//called on background thread { UILabel * label = [[UILabel alloc]initWithFrame:CGRectMake(0,0,40,100)]; [label setText:@"example"] [self.view performSelector:@selector(addSubview:) onThread:[NSThread mainThread] withObject:example waitUntilDone:YES]; }
提前致谢.
:
Threading Considerations Manipulations to your application’s user interface must occur on the main thread. Thus, you should always call the methods of the UIView class from code running in the main thread of your application. The only time this may not be strictly necessary is when creating the view object itself but all other manipulations should occur on the main thread.
对initWithFrame的调用显然不是线程安全的.对setText的调用可能不是线程安全的,落在“操纵”子句下.这些肯定不会是线程安全的.
做你的工作,找出背景线上的数据.然后在主线程上创建您的视图.如果有大量的视图,您可以尝试使用几个dispatch_async()调用分割到主队列上.这可能让UI保持响应;我没有广泛地尝试过.
您也可以考虑在可能的情况下从UIView切换到CALayer.大多数CALayer工作可以在后台线程上完成.如果你有很多观点,那可能是低效的.如果只是计算视图的数据需要很长时间,这表明您没有正确分离模型和视图信息. Model类应该独立于创建视图来计算所需的所有内容.
代码日志版权声明:
翻译自:http://stackoverflow.com/questions/11122957/is-it-ok-to-create-a-uiview-on-a-background-thread
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- MySQL(InnoDB剖析):05---InnoDB体系架构(后台线程、内存池、文件)
- java中线程安全,线程死锁,线程通信快速入门
- ObjC 多线程简析(一)-多线程简述和线程锁的基本应用
- Java多线程之线程中止
- Android 的线程和线程池
- iOS 多线程之线程安全
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
勇敢新世界‧互聯網罪與罰
許煜、劉細良 / CUP / 2005 / $48
我天天上網數小時,為的是要在節目裡面介紹世界的最新動態,尤其是網絡這個世界本身日新月異的變化。所以我不可能不注意到BT、共享軟件、 Wikipedia、網絡監管等各種影響政治、社會、經濟及文化的重要網絡現象。但是我發現市面上一直沒有一本內容充實全面,資料切時的中文參考書,直到這本《互聯網罪與罰》。而且,最大的驚喜是它易讀好看,簡直就像故事書。 梁文道 鳳凰衛視 《網羅天下......一起来看看 《勇敢新世界‧互聯網罪與罰》 这本书的介绍吧!