- 1、本文档共18页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[无限互联]AFNetworking核心类AFURLConnectionOperation的详解
我们先看看AFURLConnectionOperation 作为AFNetworking最核心的类到底有什么神奇之处!
在子线程调同步接口
在子线程调异步接口
AFNetworking使用的是最后一种方式方法,AFNetworking内部相关线程大致的关系如下图所示
只管它的 start 和 callback 就行了。如果使用 AFHttpRequestOperationManager 的接口发送请求,这些请求会统一在一个 NSOperationQueue 里去发,所以多了上面 NSOperationQueue 的一个线程。
相关代码:
[objc] view plaincopyprint?
//-------------------------线程--------------------
/*
子线程调用异步接口,子线程需要有 Runloop 去接收异步回调事件,这里也可以每个请求都新建一条
带有 Runloop 的线程去侦听回调,但这一点好处都没有,既然是异步回调,除了处理回调内容,其他
时间线程都是空闲可利用的,所有请求共用一个响应的线程就够了。
*/
//获取当前的NSRunLoop,子线程使用共同的Runloop
+ (void)networkRequestThreadEntryPoint:(id)__unused object {
@autoreleasepool {
[[NSThread currentThread] setName:@AFNetworking];
NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
[runLoop addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode];
[runLoop run];
}
}
//创建新的子线程
+ (NSThread *)networkRequestThread {
span style=white-space:pre /span static NSThread *_networkRequestThread = nil;
span style=white-space:pre /span static dispatch_once_t oncePredicate;
span style=white-space:pre /span dispatch_once(oncePredicate, ^{
span style=white-space:pre /span _networkRequestThread = [[NSThread alloc] initWithTarget:self selector:@selector(networkRequestThreadEntryPoint:) object:nil];
span style=white-space:pre /span [_networkRequestThread start];
});
return _networkRequestThread;
}
//初始化NSURLConnection对象
- (instancetype)initWithRequest:(NSURLRequest *)urlRequest {
NSParameterAssert(urlRequest);
self = [super init];
if (!self) {
return nil;
}
_state = AFOperationReadyState;
self.lock = [[NSRecursiveLock alloc] init];
= kAFNetworkingLockName;
self.runLoopModes = [NSSet setWithObject:NSRunLoopCommonModes];
self.request = urlRequest;
self.shouldUseCredentialStorage = YES;
self.securityPolicy = [AFSecurityPolicy defaultPolicy];
return self;
}
//-------------------------线程--------------------
/*
子线程调用异步接口,子线程需要有 Runloop 去接收异步回调事件,这里也可以每个请求都新建一条
带有 Runloop 的线程去侦听回调,但这一点好处都
您可能关注的文档
- 第9篇企业合并.ppt
- NETGEAR智能网管交换机如何实现IP及MAC地址绑定功能.doc
- 第9篇箱体类零件.ppt
- 第9章 IO流和类库.ppt
- 第9章 运行阶段存储组织及分配6.pdf
- 第9章_变更地籍调查及测量.pdf
- 第9章Access理解查询操作符与表达式.doc
- 第9章对象与类.ppt
- 第9章流类库及输入输出.doc
- 第35篇emWin(ucgui)窗口管理器实例(二).pdf
- 部编版八年级上册历史复习第一单元中国开始沦为半殖民地半封建社会训练题.docx
- 2024_2025学年高中历史第三单元资产阶级政治家第10课革命的先行者孙中山2教学教案岳麓版选修4.doc
- 2025届高考历史统考一轮复习课后限时集训4专制集权的不断加强含解析岳麓版.doc
- 2025届高考数学试卷专项练习12三角函数与解三角形含解析.doc
- 2025届高考生物一轮复习专题重组卷第一部分单元检测卷十生物技术实践含解析.doc
- 2025届高考政治一轮复习素养测评二十六文化创新含解析.doc
- 2024_2025学年新教材高中政治第二单元人民当家作主6.2民族区域自治制度教案部编版必修3.docx
- 2024_2025学年新教材高中地理第四章区际联系与区域协调发展4国际合作教案新人教版选择性必修2.doc
- 2025届高考数学第二次模拟试卷三理含解析.doc
- 2025版高考英语一轮复习必修3Module6OldandNew学案含解析外研版1.doc
文档评论(0)