文章目录
- AFN源码分析总结:
-
- 0. Content-type和MIME type
- 1. 序列换和反序列化:
- 2. multipart/form-data:
- 3. POST编码类型: enctype
- 4. URL编码: 百分编码: AFPercentEscapedStringFromString:
- 5. User-Agent:
- 6. NSError和NSURLError
- 7. NSJSONReadingOptions和NSJSONWritingOptions
- 8. NSURLSession:
-
- 8.1 NSURLSessionConfiguration:
- 8.2 NSURLSessionTask
- 8.3 NSURLSessionDelegate: session-level的代理方法
- 8.4 NSURLSessionTaskDelegate : task-level面向all的代理方法
- 8.5 NSURLSessionDataDelegate : task-level面向data和upload的代理方法
- 8.6 NSURLSessionDownloadDelegate : task-level的面向download的代理方法
- 8.7 NSURLSessionStreamDelegate : task-level的面向stream的代理方法
- 8.8 NSURLSessionTaskTransactionMetrics(iOS10)
- 8.9 NSURLSessionTaskMetrics(iOS10)
- 9. AFURLSessionManager: NSObject
- 10. AFHttpSessionManager: AFURLSessionManager
- 11. Serialization:
- 12. Additional Functionality:
- 13. AFN调用流程分析:
AFN源码分析总结:
0. Content-type和MIME type
AFN默认是json解析
常用类型
application/json
text/json
text/plain
text/javascript
application/xml
text/xml
application/x-plist
图片类型
image/tiff
image/jpeg
image/gif
image/png
image/ico
image/x-icon
image/bmp
image/x-bmp
image/x-xbitmap
image/x-win-bitmap
万能类型
- application/octet-stream
文件类型
- multipart/form-data
1. 序列换和反序列化:
- 序列化: OC对象转化为JSON数据(NSArray, NSDictionary);
- 反序列化: JSON数据转化为OC对象;
2. multipart/form-data:
- 原因: 最早的post请求不支持文件上传
- 方案: multipart/form-data: 用于支持文件上传, 支持向服务器发送二进制数据.
3. POST编码类型: enctype
- application/x-www-form-urlencoded: 默认, key1=value1&key2=value2;
- multipart/form-data: 一般用于需要文件上传
- text/plain, application/json: 传递文本内容
4. URL编码: 百分编码: AFPercentEscapedStringFromString:
- URL编码格式采用的是ASCII码,而不是Unicode;
- 对于非ASCII字符,需要使用ASCII字符集的超集进行编码得到相应的字节,然后对每个字节执行百分号编码。对于Unicode字符,RFC文档建议使用utf-8对其进行编码得到相应的字节,然后对每个字节执行百分号编码
5. User-Agent:
- 访问网站提供你所使用的浏览器类型及版本、操作系统及版本、浏览器内核、等信息的标识.
- 用户在上网访问的时候会作为HTTP的包头的一部分向服务器发送,用于识别用户的当前环境.
- iOS开发中AFN将设备的一些基本信息获取拼接成字符串封装了进去.
6. NSError和NSURLError
7. NSJSONReadingOptions和NSJSONWritingOptions
8. NSURLSession:
https://blog.csdn.net/kuangdacaikuang/article/details/53397276
- 整体流程
NSURL—>NSURLRequest—>NSURLSession(config / delegate / delegateQueue)—>NSURLSessionDataTask
- 简单实现代码
- NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[[NSOperationQueue alloc] init]];
- NSURLRequest *request = [[NSURLRequest alloc]initWithURL:[NSURL URLWithString:@“”]];
- NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:{}];
- [dataTask resume];
- .h文件分析
- 分为初始化部分、属性部分、dataTask部分、uploadTask部分、downloadTask部分、streamTask部分(iOS9).
- 两套API: 一套不到block回调的API, 一套带block回调的API(NSURLSession的分类实现);
8.1 NSURLSessionConfiguration:
https://www.jianshu.com/p/9e7e19f9afe5
- 三种类型的configuratin
- defaultSessionConfiguration: 默认的配置会将缓存存储在磁盘上, 并在用户的钥匙串中存储凭据, 还将cookie(默认情况下)存储在共享cookie存储中.
- ephemeralSessionConfiguration: 第二种瞬时会话模式不会创建持久性存储的缓存, 短暂会话对于web浏览器和其他类似情况