• AFN的六大模块


    • NSURLConnection,主要对NSURLConnection进行了进一步的封装,包含以下核心的类:

      • AFURLConnectionOperation
      • AFHTTPRequestOperationManager
      • AFHTTPRequestOperation
    • NSURLSession,主要对象NSURLSession对象进行了进一步的封装,包含以下核心的类:

      • AFURLSessionManager
      • AFHTTPSessionManager
    • Reachability,提供了与网络状态相关的操作接口,包含以下核心的类:

      • AFNetworkReachabilityManager
    • Security,提供了与安全性相关的操作接口,包含以下核心的类:

      • AFSecurityPolicy
    • Serialization,提供了与解析数据相关的操作接口,包含以下核心的类:

      • AFURLRequestSerialization
      • AFURLResponseSerialization
    • UIKit,提供了大量网络请求过程中与UI界面显示相关的操作接口,通常用于网络请求过程中提示,使用户交互更加友好,包含以下核心的分类/类:

      • AFNetworkActivityIndicatorManager
      • UIActivityIndicatorView+AFNetworking
      • UIAlertView+AFNetworking
      • UIButton+AFNetworking
      • UIImageView+AFNetworking
      • UIKit+AFNetworking
      • UIProgressView+AFNetworking
      • UIRefreshControl+AFNetworking
      • UIWebView+AFNetworking

    AFURLSessionManager


    • 创建任务的方法

      • 普通任务

        - (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler
        /**
        * request:请求对象
        * completionHandler:请求完成调用的Block 
        	* response:服务器的响应信息
        	* responseObject:服务器返回的数据
        	* error:错误信息
        */
      • 上传任务(分别上传不同类型的文件)

        // 1. 上传文件类型的数据
        - (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromFile:(NSURL *)fileURL progress:(NSProgress * __autoreleasing *)progress completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler
        /**
        * fileURL:所要上传文件的路径
        */
        
        // 2. 上传NSData类型的数据
        - (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromData:(NSData *)bodyData progress:(NSProgress * __autoreleasing *)progress completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler
        /**
        * bodyData:所要上传的文件数据
        */
        
        // 3. 上传流数据
        - (NSURLSessionUploadTask *)uploadTaskWithStreamedRequest:(NSURLRequest *)request progress:(NSProgress * __autoreleasing *)progress completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler
        /**
        * request:通过流数据初始化的请求对象
        */
      • 下载任务

        // 1. 普通下载任务
        - (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request progress:(NSProgress * __autoreleasing *)progress destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler
        /**
        * progress:管理下载进度
        * destination:保存数据调用的Block
        	* targetPath:数据的保存路径
        	* 服务器的响应信息
        */
        
        // 2. 支持断点下载的下载任务
        - (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData progress:(NSProgress * __autoreleasing *)progress destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler 
        /**
        * progress:管理下载进度
        * resumeData:断点下载时的断点信息
        */                                   

    AFHTTPSessionManager


    • 常用的属性

      • baseURL(NSURL *),用于监视网络可达性与创建请求对象
      • requestSerializer(AFHTTPRequestSerializer *),指定指定GET、HEAD与DELETE请求参数的解析格式
      • responseSerializer(AFHTTPResponseSerializer *),用于指定服务器返回数据的格式
    • 常用方法

      • 初始化

        // 1. 通过工厂方法创建AFHTTPSessionManager对象
        + (instancetype)manager
        // 2. 通过构造方法创建AFHTTPSessionManager对象
        - (instancetype)initWithBaseURL:(NSURL *)url
        /**
        * 根据url初始化AFHTTPSessionManager对象
        */
        - (instancetype)initWithBaseURL:(NSURL *)url sessionConfiguration:(NSURLSessionConfiguration *)configuration
        /**
        * 根据url与configuration初始化AFHTTPSessionManager对象
        */
      • 请求数据

        // 1. GET请求
        - (NSURLSessionDataTask *)GET:(NSString *)URLString parameters:(id)parameters success:(void (^)(NSURLSessionDataTask *task, id responseObject))success failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure
        /**
        * URLString:请求路径
        * parameters:请求参数
        * success:请求成功时调用的Block
        	* responseObject:服务器返回的数据
        * failure:请求失败时调用的Block
        	* error:错误信息
        */
        // 2. POST请求
        - (NSURLSessionDataTask *)POST:(NSString *)URLString parameters:(id)parameters success:(void (^)(NSURLSessionDataTask *task, id responseObject))success failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure
        /**
        * 参数含义与GET请求相同
        */
        - (NSURLSessionDataTask *)POST:(NSString *)URLString parameters:(id)parameters constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block success:(void (^)(NSURLSessionDataTask *task, id responseObject))success failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure
        /**
        * block:用于创建多个数据来源
        */

    使用AFN请求网络数据


    • 请求数据(XML/JSON)

      • 创建AFHTTPSessionManager对象

        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
      • 指定对服务器的返回数据格式

        //以XML文档的形式返回数据
        manager.responseSerializer = [AFXMLParserResponseSerializer serializer];
        //以JSON形式返回数据
        manager.responseSerializer = [AFJSONResponseSerializer serializer];
      • 设置请求体(类型为XML或JSON)

        // 请求体通常由服务器指定格式
        	NSDictionary *params = @{
                                 @"username" : @"账号",
                                 @"pwd" : @"密码",
                                 @"type" : @"XML/JSON"
                                 };                             
      • 发送请求

        [manager GET:@"请求路径" parameters:params success:^(NSURLSessionDataTask *task, id responseObject) {
        	//responseObject:服务器返回的数据
            NSLog(@"请求成功");
        } failure:^(NSURLSessionDataTask *task, NSError *error) {
        	//error:错误信息
            NSLog(@"请求失败");
        }];
    • 上传数据

      • 创建AFHTTPSessionManager对象

        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
      • 创建上传任务

        /**基于NSURLConnection*/
        [manager POST:@"请求路径" parameters:@{@"用户名" : @"密码" constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
         	//设置需要上传的文件
            NSData *data = [NSData dataWithContentsOfFile:@"所要长传文件的路径"];
            [formData appendPartWithFileData:data name:@"file" fileName:@"test.png" mimeType:@"image/png"];
        } success:^(NSURLSessionDataTask *task, id responseObject) {      
            //上传成功
        } failure:^(NSURLSessionDataTask *task, NSError *error) {
            //上传失败
        }];
        
        /**基于NSURLSession*/
        [manager uploadTaskWithRequest:request fromData:data progress:progress completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
            //上传数据成功
        }];
    • 下载数据

      • 创建AFHTTPSessionManager对象

        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
      • 创建下载任务

        /**基于NSURLSession*/
        [manager downloadTaskWithRequest:request progress:progress destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
            // 存储下载数据是调用的Block
        } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
            //下载完成时调用的Block
        }]
  • 相关阅读:
    zoj 3279 线段树 OR 树状数组
    fzu 1962 树状数组 OR 线段树
    hdu 5057 块状链表
    hdu3487 Play with Chain
    bzoj 1588营业额统计(HNOI 2002)
    poj2823 Sliding Window
    poj2828 Buy Tickets
    poj2395 Out of Hay
    poj3667 Hotel
    poj1703 Lost Cows
  • 原文地址:https://www.cnblogs.com/sunshine-liuxin/p/5472607.html
Copyright © 2020-2023  润新知