AFNetworking 源码阅读

独奏

学习思考|2016-1-11|最后更新: 2023-2-23|
type
status
date
slug
summary
tags
category
icon
password
AFNetworking 3.0 发布了,这个版本去除了 NSURLConnectionOperation,使用 NSURLSession 代替,于是,这个版本只支持 iOS 7以及以上版本,代码也相应的精简了不少,于是利用一周时间阅读了一下 AFNetworking 3.0 的源码。

技巧

使用 :? 符号,忽略编译器的警告

iOS bug fix

AFURLSessionManager.m
AFURLSessionManager.h

多线程

dispatch_semaphore的使用

AFURLSessionManager.m 里面的 tasksForKeyPath: 方法,通过引入信号量的方式把NSURLSession的异步方法 getTasksWithCompletionHandler: 变成了同步方法
上面代码中 @unionOfArrays.self 参考:http://nshipster.com/kvc-collection-operators/

作者声明二级指针

这里是为了做 KVO 的时候给 context 赋值,便于区分不同的 context,由于这个AFHTTPRequestSerializerObserverContext的内存地址是在编译的时候就决定了,所以这么声明确实可以保证 context 不同,是个比较讨巧的方式

static 方法

作者在多处使用 static 方法

参考 & 代码地址

边阅读边标注,阅读标注后的代码地址:AFNetworking 3.0
参考: