我有一个后台线程的循环,其中我想告诉用户它的进度。UI性能税
所以,在这个循环中,我称之为
[self performSelectorOnMainThread:@selector(updateProgressBarto:) withObject:@(value) waitUntilDone:YES];
我把一些日志记录的循环之前和之后,并提出以下意见:
如果我能以上述行显示进度,我记录控制台显示:
2017-06-17 16:43:49.675 myApp[8523:551864] Start Import
2017-06-17 16:43:59.119 myApp[8523:551864] Done Importing
这是一个DELT一个大约9.5秒
没有进度条,它看起来像
2017-06-17 16:47:06.052 myApp[8611:556572] Start Import
2017-06-17 16:47:12.776 myApp[8611:556572] Done Importing
到6.7秒
作为对比,如果循环是在后台运行取,有根本没有UI参与,日志显示:
2017-06-17 16:45:12.199 myApp[8523:553684] Start Import
2017-06-17 16:45:13.084 myApp[8523:553684] Done Importing
这是小于一秒。
如果我设置
waitUntilDone:NO
我得到的不良副作用,进度栏更新只有3次,而不是50 +倍。
技术问题:这是我/用户必须忍受的事情,还是有任何感知技巧来解决这个问题?
心理问题: 你/用户喜欢6秒不超过9秒与反馈视觉反馈?
您的见解非常受欢迎。
你是对的,你不应该等待。而且,最好使用GCD的'dispatch_async'而不是'performSelector'调用。但是,你的数字乞讨了为什么进度条更新需要花费那么多时间。但我们需要看看那里发生了什么,以便发表评论。简单的进度条更新应该在6秒内轻松更新超过50次。这里还有其他事情要做。 – Rob