iOS多线程的初步研究(五)-- 如何让NSURLConnection在子线程中运行
来源:互联网 发布:淘宝客服没经验能干吗 编辑:程序博客网 时间:2024/05/17 10:38
原文地址 http://www.cnblogs.com/sunfrog/p/3243230.html
可以有两个办法让NSURLConnection在子线程中运行,即将NSURLConnection加入到run loop或者NSOperationQueue中去运行。
前面提到可以将NSTimer手动加入NSRunLoop,Cocoa库也为其它一些类提供了可以手动加入NSRunLoop的方法,这些类有NSPort、NSStream、NSURLConnection、NSNetServices,方法都是[scheduleInRunLoop:forMode:]形式。我暂时只介绍下最常用的NSURLConnection类,看看如何把NSURLConnection的网络下载加入到其它线程的run loop去运行。
如果NSURLConnection是在主线程中启动的,实际上它就在主线程中运行 -- 并非启动的另外的线程,但又具备异步运行的特性,这个确实是run loop的巧妙所在。如果对run loop有了初步的了解和概念后,实际上就能明白NSURLConnection的运行,实际也是需要当前线程具备run loop。
- (void)scheduleInRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode; //将加入指定的run loop中运行,必须保证这时NSURLConnection不能启动,否则不起作用了
- (void)unscheduleFromRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode; //将取消在指定run loop中的运行,实际上就会停止NSURLConnection的运行
下面是如何在其它线程中运行NSURLConnection的主要实现代码:
NSRunLoop *runloop; //global
[self performSelectorInBackground:@selector(thread) withObject:nil]; //启动包含run loop的线程
NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO]; //注意这时不能先启动NSURLConnection
[conn scheduleInRunLoop:runloop forMode:NSRunLoopCommonModes]; //指定在上面启动的线程中运行NSURLConnection
[conn start]; //启动NSURLConnection
- (void)thread
{
runloop = [NSRunLoop currentRunLoop]; //设置为当前线程的run loop值
while (condition)
{
[runloop runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1.0]]; //启动run loop
}
}
将NSURLConnection加入到NSOperationQueue中去运行的方式基本类似:
NSOperationQueue *queue = [[NSOperationQueuealloc] init];
NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO];
[conn setDelegateQueue:queue];
[conn start];
- iOS多线程的初步研究(五)-- 如何让NSURLConnection在子线程中运行
- iOS多线程的初步研究(五)-- 如何让NSURLConnection在子线程中运行
- iOS多线程的初步研究(五)-- 如何让NSURLConnection在子线程中运行
- iOS多线程的初步研究(五)-- 如何让NSURLConnection在子线程中运行
- iOS多线程的初步研究(五)-- 如何让NSURLConnection在子线程中运行
- iOS多线程的初步研究(五)-- 如何让NSURLConnection在子线程中运行
- iOS多线程的初步研究(五)-- 如何让NSURLConnection在子线程中运行
- iOS多线程的初步研究(五)-- 如何让NSURLConnection在子线程中运行
- iOS多线程的初步研究(五)-- 如何让NSURLConnection在子线程中运行
- iOS多线程的初步研究(五)-- 如何让NSURLConnection在子线程中运行
- iOS多线程的初步研究(四、五、六)--NSTimer--NSURLConnection子线程中运行 ---- NSOperation
- iOS多线程的初步研究(五)-- 如何让NSURLConnection在子线
- iOS 多线程初步研究-NSURLConnection在子线程中运行
- 多线程-5、如何让NSURLConnection在子线程中运行
- 如何让NSURLConnection在子线程中运行
- iOS多线程的初步研究(一)
- iOS多线程的初步研究(-)-- NSTimer
- iOS多线程的初步研究(一)
- hdu1864(最大报销额 DP动态规划)
- oauth2.0认证和授权原理以及视频教程
- LVS的DR模型工作流程从ip数据层的详细分析
- Cocos| 3D建模规范及注意事项
- log4js multiprocess appenders 的配置
- iOS多线程的初步研究(五)-- 如何让NSURLConnection在子线程中运行
- RPM使用笔记
- 众筹引发大商业机遇
- iOS 7 点击按钮切换视图
- 架构C#WebService程序
- Linux 进程通信(System V)共享内存区
- Flex事件机制
- 上海seo招聘面试技巧
- iOS多线程的初步研究(六)-- NSOperation