AFNetworking 学习笔记

    xiaoxiao2022-06-30  88

    看了下 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(下载完成后, 移动到指定的位置)


    最新回复(0)