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 多线程之线程安全
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Head First HTML5 Programming
Eric Freeman、Elisabeth Robson / O'Reilly Media / 2011-10-18 / USD 49.99
What can HTML5 do for you? If you're a web developer looking to use this new version of HTML, you might be wondering how much has really changed. Head First HTML5 Programming introduces the key featur......一起来看看 《Head First HTML5 Programming》 这本书的介绍吧!