
所以我的问题是在主线程中更新UI而不阻塞它并让其他对象在后台运行并根据需要将值返回给主线程的推荐方法是什么.我知道如何使用块,但不允许块 *** 作返回值.
我需要的是帮助这个伪代码的东西:
-(IBAction) main {//Update progress indicator UI to show progress//perform an call to another object from another class.// wait till i get its return value.//Update progress indicator UI to show progress// Use this return value to do something.//Update progress indicator UI to show progress} 当调用另一个对象时,我注意到确定的nsprogressIndicator我已经完全消失,因为主线程被阻塞了.谢谢.
解决方法 您的上述代码不是正确的方法.由于main永不返回,因此进度指示器永远不会更新.您必须快速返回主线程.相反,您要做的是设置一个后台块,在不同的点上更新主线程上的进度指示器.所以,例如:
- (IBAction)start:(ID)sender { dispatch_queue_t queue = dispatch_get_global_queue(disPATCH_QUEUE_PRIORITY_DEFAulT,0); dispatch_async(queue,^{ dispatch_async(dispatch_get_main_queue(),^{[self.progress setProgress:0];}); // Doing some stuff dispatch_async(dispatch_get_main_queue(),^{[self.progress setProgress:.25];}); // Doing more stuff dispatch_async(dispatch_get_main_queue(),^{[self.progress setProgress:.75];}); });} (是的,这会导致队列保留自己,但这样就可以了,因为self没有保留队列.)
总结以上是内存溢出为你收集整理的objective-c – 在Cocoa应用程序中阻止主线程时,UI不会更新全部内容,希望文章能够帮你解决objective-c – 在Cocoa应用程序中阻止主线程时,UI不会更新所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)