ASIHTTPRequest占用主线程问题解决
来源:互联网 发布:优化顶碗少年阅读答案 编辑:程序博客网 时间:2024/06/09 16:49
ASIHTTPRequest是个很易用的iOS / Mac OS X平台的HTTP库,不过当下载线程数超过2个时,就会影响到主线程响应用户请求的速度了。经测试发现completionBlock总是在主线程调用,而NSOperation的文档中却说一般会在子线程中执行。
于是看了下ASIHTTPRequest.m,终于发现问题所在了:
解决的办法很简单,可以按它所说的继承ASIHTTPRequest,并改写requestFinished方法。或者像我这种懒人,直接改源码:
改完后重新构建一遍,发现至少5个下载线程时也不会影响主线程了,搞定收工~
于是看了下ASIHTTPRequest.m,终于发现问题所在了:
// Subclasses might override this method to process the result in the same thread// If you do this, don't forget to call [super requestFinished] to let the queue / delegate know we're done- (void)requestFinished{#if DEBUG_REQUEST_STATUS || DEBUG_THROTTLING NSLog(@"[STATUS] Request finished: %@",self);#endif if ([self error] || [self mainRequest]) { return; } if ([self isPACFileRequest]) { [self reportFinished]; } else { [self performSelectorOnMainThread:@selector(reportFinished) withObject:nil waitUntilDone:[NSThread isMainThread]]; }}
这段代码显示了,在不使用自动代理脚本时,就会在主线程执行reportFinished。解决的办法很简单,可以按它所说的继承ASIHTTPRequest,并改写requestFinished方法。或者像我这种懒人,直接改源码:
- (void)requestFinished{#if DEBUG_REQUEST_STATUS || DEBUG_THROTTLING NSLog(@"[STATUS] Request finished: %@",self);#endif if ([self error] || [self mainRequest]) { return; } [self reportFinished];}
改完后重新构建一遍,发现至少5个下载线程时也不会影响主线程了,搞定收工~
- ASIHTTPRequest占用主线程问题解决
- ASIHTTPRequest占用主线程问题解决
- 让ASIHTTPRequest不占用主线程
- 让ASIHTTPRequest不占用主线程
- 让ASIHTTPRequest不占用主线程
- android3.0以前主线程联网问题出错问题解决
- 【问题解决】android网络连接—主线程连接错误
- performanceCounter文件占用问题解决
- tomcat端口占用问题解决
- JVM占用问题解决
- 8080端口占用问题解决
- Jenkins磁盘占用问题解决
- 主线程
- 主线程
- ASIHTTPRequest用户登陆:重复用户登陆问题解决
- ASIHTTPRequest用户登陆:重复用户登陆问题解决
- ASIHTTPRequest iOS7下内存泄漏问题解决记录
- Unity多线程修改主线程的问题解决方案 有限状态机相关理解
- 【动态规划】保镖排队
- GMT科学绘图应用
- hdu - 4306 - Mahjong - 2 -sat
- 杭州烟花爆炸烧伤多人 百人皮肤灼伤衣服破损-杭州-烟花-爆炸
- C++与C#对比学习:函数(五)克隆函数,面向接口编程思想
- ASIHTTPRequest占用主线程问题解决
- .isNull, isNotNull与isEmpty, isNotEmpty区别
- IndoorAtlas:利用地磁进行室内导航的移动地图应用(附视频)
- 华为中兴在欧更受欢迎 任正非受礼遇
- Ubuntu下面触板的开启、关闭
- 对计算机读研的看法
- 手把手教你学会 Emacs 高级定制
- 莫言教学常启迪学生多动脑 主张把自己当罪人写-莫言-诺贝尔文学奖-兰传斌
- Objective-c的Categories和protocols