Vol*_*ort 2 objective-c nsprogressindicator
我的应用程序使用一堆For循环做了很多工作.它会计算大量的字符串,并且可能需要一整分钟才能完成.
所以我在我的应用程序中放置了一个NSProgressIndicator.
在循环中,我使用了NSProgressIndicator的"incrementBy"函数.但是,我没有看到实际的酒吧填满.
我怀疑这是因为循环使所有功能成为可能,因此NSProgressIndicator没有更新(图形化).
那我怎么能取得进展呢?
你的for循环是在主线程还是在后台线程中运行?如果它们在主线程上运行,GUI将永远不会有机会更新自身以反映进度更改,因为这只会在runloop结束时发生,即在您的函数运行完毕之后.
如果你的for循环在后台运行,你就是顽皮!除了主线程之外,您不应该从任何地方更新GUI.如果您的目标是现代系统,可以使用GCD轻松解决这个问题.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {
for (int i = 0; i < n; i++) {
// do stuff
dispatch_async(dispatch_get_main_queue(), ^(void) {
// do your ui update here
});
}
});
Run Code Online (Sandbox Code Playgroud)
或者,您可以重写for循环以进一步利用GCD并使用dispatch_apply.相当于上述内容将是:
dispatch_apply(n, DISPATCH_QUEUE_PRIORITY_DEFAULT, ^(size_t i) {
// for loop stuff here
dispatch_async(dispatch_get_main_queue(), ^(void) {
// do your ui update here
});
});
Run Code Online (Sandbox Code Playgroud)
请注意,使用dispatch_apply意味着循环的每个"迭代" 可以相互并发运行,因此如果for循环需要以串行方式运行,这将不适用.
| 归档时间: |
|
| 查看次数: |
1542 次 |
| 最近记录: |