iOS_AFN

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 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 formData) {

//設置需要上傳的文件? ??

NSData *data = [NSData dataWithContentsOfFile:@"所要長傳文件的路徑"];? ??

[formData appendPartWithFileData:dataname:@"file"fileName:@"test.png"mimeType:@"image/png"];

}success:^(NSURLSessionDataTask *task, id responseObject) {

//上傳成功

}failure:^(NSURLSessionDataTask *task, NSError *error) {

//上傳失敗}];

/**基于NSURLSession*/[manager uploadTaskWithRequest:requestfromData:dataprogress:progresscompletionHandler:^(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

}]

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容