1
alexrezit OP 没人么... orz
|
2
txx 2012-11-09 16:48:36 +08:00
不太理解为何delegate效率低。。。。
|
7
wtl 2012-11-09 19:51:35 +08:00
可以考虑用GCD 以前碰到过类似问题 需要频繁更新UI 不过没在iOS上试过
static NSOperationQueue *updateQueue; if ([updateQueue operationCount] < 2) { [updateQueue addOperationWithBlock:^{ dispatch_sync(dispatch_get_main_queue(), ^{ updateUI(); }); }]; } |
8
alexrezit OP |
9
alexrezit OP |
10
krafttuc 2012-11-09 20:34:05 +08:00
没看懂楼主到底想表达什么意思。你是说,在做网络I/O的时候在UI上显示当前进度吗?delegate跟性能不性能没什么关系啊,就是正常的函数调用。你卡UI很可能就是在主线程做了一些比较耗费时间的事情,把他们扔到后台去。
|
11
wtl 2012-11-09 21:03:41 +08:00
@alexrezit :)不谢。不过,我觉得你那种写法与timer没多大不同。
我的本意是向updateQueue中加入更新的任务,并且为了避免无谓的更新,维持其个数小于2两个,而又充分利用CPU,尽可能的及时更新。 但是对于你的需求,相对于下载时间,一秒其实无所谓,所以也许timer更适合。 BTW,怎么粘帖code啊? |
12
wtl 2012-11-09 21:09:42 +08:00
另外,我的那段代码是要加到delegate或者kvo的回调里,或者加到timer中,都可以。
|
13
alexrezit OP @wtl
用 github 的 gist 链接粘贴代码, 不过必须是 http 的. 我都不确定自己还会不会用 NSTimer, dispatch 已经把我变成了一个懒人... orz 现在暂时还没试真机的表现呢, 因为测试下载功能要占用大量的空间, Apple 又非常脑残地不能从 Xcode 直接清除测试机上的数据. |
14
luanma 2012-12-02 08:58:02 +08:00
减少刷新频率
|
15
dingtianran 2012-12-16 19:31:25 +08:00
1.)
10.7及之前的mac有一个web sharing选项,其实是个内置的apache,用来快速做一个站点,非常适合于真机测试 10.8之后给关掉了,可以通过改一些设置再度打开。 同时配合真机的networking link condition(iOS 6才有)可以很方便模拟巨慢巨卡的网速来测试下载进度 2.) 刷新UI的过程可不可以拆开,拆成好多个phase1,2,3,4,5 然后准备相应好多个BOOL,如果某个phase需要刷新设置成YES,平时都是NO 绘制的时候遇到YES才会去update,如果NO就路过了 |
16
alexrezit OP |