AFNetworking 学习笔记

看了下 AFNetWorking 的源码 发现是在不同的类中 设置不同的 Content-Type 这个暂时解读下, 具体的还要系统的阅读下

// - 请求格式 :  POST  HTTP/1.1
						Content-Type: application/x-www-form-urlencoded; charset=utf-8
						Cookie: PHPSESSID=8oi7m7s8495aha6q3fetvabg47
						Host: www.dev.qi-e.tv
						Connection: close
						User-Agent: Paw/3.1.7 (Macintosh; OS X/10.14.0) GCDHTTPRequest
						Content-Length: 76

						password=96e79218965eb72c92a549dd5a330112&is_user_count=0&type=md5&username=

AFHTTPRequestSerializer : NSObject
[mutableRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];

// - 请求格式 :  POST  HTTP/1.1
						Content-Type: multipart/form-data; charset=utf-8; boundary=__X_PAW_BOUNDARY__
						Cookie: PHPSESSID=8oi7m7s8495aha6q3fetvabg47
						Host: www.dev.qi-e.tv
						Connection: close
						User-Agent: Paw/3.1.7 (Macintosh; OS X/10.14.0) GCDHTTPRequest
						Content-Length: 361

						--__X_PAW_BOUNDARY__
						Content-Disposition: form-data; name="password"

						96e79218965eb72c92a549dd5a330112
						--__X_PAW_BOUNDARY__
						Content-Disposition: form-data; name="is_user_count"

						0
						--__X_PAW_BOUNDARY__
						Content-Disposition: form-data; name="type"

						md5
						--__X_PAW_BOUNDARY__
						Content-Disposition: form-data; name="username"


					--__X_PAW_BOUNDARY__--
AFStreamingMultipartFormData : NSObject
[self.request setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", self.boundary] forHTTPHeaderField:@"Content-Type"];

// - 请求格式 :  POST  HTTP/1.1
						Content-Type: application/json; charset=utf-8
						Cookie: PHPSESSID=8oi7m7s8495aha6q3fetvabg47
						Host: www.dev.qi-e.tv
						Connection: close
						User-Agent: Paw/3.1.7 (Macintosh; OS X/10.14.0) GCDHTTPRequest
						Content-Length: 94

						{"password":"96e79218965eb72c92a549dd5a330112","is_user_count":"0","type":"md5","username":""}

AFJSONRequestSerializer : AFHTTPRequestSerializer
[mutableRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

// - 请求格式 :  这个小老弟也没见过, 蒙不出来
AFPropertyListRequestSerializer : AFHTTPRequestSerializer
[mutableRequest setValue:@"application/x-plist" forHTTPHeaderField:@"Content-Type"];

在 AFURLSessionManager 文件中 发现有dispatch_group_async的操作, 开始不知道使用 group 的原因,后来询问了几位大佬, 怀疑是要用户可以定制 group, 之后,自己管理. 就是说 如果用户给 manager 传递了一个 completionGroup ,那么只要自己处理这个completionGroup 的dispatch_group_notify统一回调即可, 就可以实现所有请求完成后的统一回调;

// - 声明中的属性
@property (nonatomic, strong, nullable) dispatch_group_t completionGroup;

// - 实现中的代码
 dispatch_group_async(manager.completionGroup ?: url_session_manager_completion_group(), manager.completionQueue ?: dispatch_get_main_queue(), ^{
                if (self.completionHandler) {
                    self.completionHandler(task.response, responseObject, serializationError);
                }

                dispatch_async(dispatch_get_main_queue(), ^{
                    [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingTaskDidCompleteNotification object:task userInfo:userInfo];
                });
            });

外部可读, 内部,可读可写的操作方法

.h中
@property (readonly, nonatomic, strong, nullable) NSURL *baseURL;
.m中
@property (readwrite, nonatomic, strong) NSURL *baseURL;

简便的三目运算符

`A ?: B = A ? A : B`

AFHTTPSessionManager文件上传, 使用的是 uploadTaskWithStreamedRequest(文件上传时候, 拼接formData) 而文件下载, 使用的是downloadTaskWithRequest(下载完成后, 移动到指定的位置)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值