在另一个线程中运行MBProgressHUD?
问题描述:
我正在使用MBProgressHUD
显示一个“繁忙”的动画,以在UITableView被填充时使用用户。 UITableView
会阻止主线程,所以直到表完成加载后才会出现动画。在另一个线程中运行MBProgressHUD?
有没有办法让另一个线程上运行繁忙的动画,而UITableView
占用主线程?
答
UIKit在运行循环完成当前周期时执行绘图。换句话说,如果您正在配置视图(例如,MBProgressHUD),则更改将在下一次运行循环迭代之前不可见。因此,如果您不允许运行循环通过阻塞主线程来旋转,则UI更改将不会立即显示。
如果您无法在后台线程上工作,则需要允许运行循环完成其循环,然后才能在主线程上启动长时间运行的阻塞任务。
您可以通过调度下一次运行循环迭代的执行来完成此操作。
// Setup and show HUD here
[self performSelector:@selector(myTask) withObject:nil afterDelay:0.001];
在myTask的末尾隐藏HUD。 或者您可以手动运行运行循环。
// Setup and show HUD here
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate distantPast]];
// Insert myTask code here
// Hide the shown HUD here
或者(如果你可以使用块)
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.001 * NSEC_PER_SEC), dispatch_get_main_queue(), ^(void){
// Insert myTask code here
});
希望我能给予好评于此。 – 2012-05-15 09:18:56
感谢,作品像魅力:) – 2012-09-05 12:16:18
上述代码导致内存泄漏。任何想法如何解决它? – arundevma 2012-11-05 12:43:07