1 NSURLConnettion NSURLConnettion是 Core Foundation/CFNetwork框架 API 之上的一個抽象. NSURLConnettion是用來指代 Foundation 框架中的一系列組件: NSURLRequest,NSURLResponse,NSUR ...
1 NSURLConnettion
NSURLConnettion是 Core Foundation/CFNetwork框架 API 之上的一個抽象. NSURLConnettion是用來指代 Foundation 框架中的一系列組件: NSURLRequest,NSURLResponse,NSURLProtocol,NSURLCache,NSHTTPCookieStorage,NSURLCredentialStorage 以及同名類 NSURLConnection.
註1:原來的使用原理:一個 NSURLRequest 發送給 NSURLConnect.被委托對象(遵守 NSURLConnectionDeledate 和 NSURLConnectionDataDeledate 非正式協議)非同步返回一個 NSURLResponce 和伺服器的 NSData.
註2:在一個請求發送給伺服器的時候,系統會先查詢緩存信息,然後根據策略和可用寫的不同,當在緩存中找到響應則直接返回.否則,系統將根據我們的策略,將接到請求後的響應緩存到並返回.
註3:在把請求發送給伺服器的時候,伺服器會發出鑒權查詢,這可以有共用的 cookie 或者機密存儲來自動響應,或者由被委托的對象來響應.發送中的請求,也可以被 NSURLProtocol 攔截,以便在必要的時候,無縫的改變其請求.
NSURLConnettion是使用步驟:
1 獲取一個 URL
2 通過 URL 創建一個請求
3 用NSURLConnettion發送請求
2 NSURLSession
和 NSURLConnection 一樣, NSURLSession 不僅僅包括同名的 NSURLSession, 還包括NSURLRequest 和 NSURLCache. 同時將NSURLConnection 對應為NSURLSession,NSURLSessionFiguration 以及NSURLSession 的三個子類,即NSURLSessionTask,NSURLSessionUpLoadTask 和 NSULSessionDownLoadTask.
和 NSURLConnection 相比, NSURLSession 最大的改變可以配置每一個緩存的session 緩存, cookie 值,協議以及證書策略甚至誇程式共用這些信息.這保證了程式和網路框架之間的相互獨立.每一個 NSURLSession 有一個 NSURLSessionConfiguration 來進行初始化, NSURLSessionConfiguration指定了策略,以及在移動設備上增強性能的選項.
NSURLSession 的另一個特點就是 session Task, 用來處理的上傳和下載.和 NSURLConnection 最大的不同之處在於,所有的 task 共用其創造者 NSURLSession.
註: NSURLSessionTask分析
NSURLSessionTask 是一個抽象類,裡面包含NSURLSessionDataTask , NSURLSessionDownLoadTask 以及 NSURLSessionUpLoadTask三個子類.這三個子類封裝了網路的基本任務:獲取數據,上傳和下載
使用原理:當一個 NSURLSessionDataTask 完成的時候,會有一個返回的數據,一個 NSURLSessionDownLoadTask 完成的時候會帶一個臨時文件的路徑.文件上傳的時候也會返回一定的數據,所以可以說 NSURLSessionUpLoadTask 是繼承於 NSURLSessionDataTask.所有的 Task 都可以取消,暫停和恢復,當暫停的時候回記錄當前的位置,以便下載繼續從此點繼續下載.需要說明的是 NSURLSessionTask 是有 NSURLSession 創建的.
NSURLSession的使用步驟:和 NSURLConnection 基本相似,然後使用resume方法來講它運行.
1 獲取一個 URL
2 通過 URL 創建一個請求
2.1 創建一個上傳的NSData(UpLoad 上傳的時候用)
3 創建一個NSURLSession的單例
4 通過NSURLSession發送請求(註:使用 resume)
實例:
1 DataTask
NSURL *URL = [NSURL URLWithString:@"http://example.com"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
completionHandler:
^(NSData *data, NSURLResponse *response, NSError *error) {
// ...
}];
[task resume];
2 UpLoadTask
NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
NSData *data = ...;
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionUploadTask *uploadTask = [session uploadTaskWithRequest:request
fromData:data
completionHandler:
^(NSData *data, NSURLResponse *response, NSError *error) {
// ...
}];
[uploadTask resume];
3 DownLoadTask
註: Download task 也需要一個 request,不同之處在於 completionHandler 這個 block。Data task 和 upload task 會在任務完成時一次性返回,但是 Download task 是將數據一點點地寫入本地的臨時文件。所以在 completionHandler 這個 block 里,我們需要把文件從一個臨時地址移動到一個永久的地址保存起來.
NSURL *URL = [NSURL URLWithString:@"http://example.com/file.zip"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDownloadTask *downloadTask = [session downloadTaskWithRequest:request
completionHandler:
^(NSURL *location, NSURLResponse *response, NSError *error) {
NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSURL *documentsDirectoryURL = [NSURL fileURLWithPath:documentsPath];
NSURL *newFileLocation = [documentsDirectoryURL URLByAppendingPathComponent:[[response URL] lastPathComponent]];
[[NSFileManager defaultManager] copyItemAtURL:location toURL:newFileLocation error:nil];
}];
[downloadTask resume];
3 NSURLSession 和 NSURLConnection 的區別
NSURLSession即有 session 的代理方法又有 Task 的代理方法.session 的代理方法用來處理連接層的問題(伺服器的信任,客戶端證書的評估等),Task 的代理方法用來處理鑒權查詢和以網路請求有關的問題.
4 AFN 框架
AFN 是對 NSURLConnection 的一層封裝
AFN 的主要功能:
- NSURLConnection
AFURLConnectionOperation
AFHTTPRequestOperation
AFHTTPRequestOperationManager(封裝了常用的 HTTP 方法)
AFHTTPRequestOperationManager的屬性
1 baseURL :開發者針要對 AFHTTPRequestOperationManager 自定義一個單例子類,設置 baseURL, 所有的網路訪問,都只使用相對路徑即可.
2 requestSerializer :請求數據格式/預設是二進位的 HTTP
3 responseSerializer :響應的數據格式/預設是 JSON 格式
4 operationQueue
5 reachabilityManager :網路連接管理器
AFHTTPRequestOperationManager方法:
1 manager :方便創建管理器的類方法
2 HTTPRequestOperationWithRequest :在訪問伺服器時,如果要告訴伺服器一些附加信息,都需要在 Request 中設置
3 GET
4 POST
- NSURLSession
AFURLSessionManager
AFHTTPSessionManager(封裝了常用的 HTTP 方法)
1 GET
2 POST
3 UIKit+AFNetWorking分類
4 NSProgress(利用 KVO)
- 半自動的序列化和反序列化
AFURLRequestSerialization :請求的數據格式/預設是二進位的
AFURLResponseSerialization :響應的數據格式/預設是JSON格式
- 附加功能
1 安全策略:(HTTPS 和AFSecurityPolicy)
2 網路檢測: (對鏈接方式進行了封裝和 AFNetWorkingReachabiliManager)
使用鏈接: http://www.cnblogs.com/worldtraveler/p/4736643.html
AFN 的使用步驟:
1 創建一個請求操作管理者
2 聲明響應結果進行 JSON,XML等數據解析,返回 Data
3 設置請求參數
4 發送請求
補充 ASI: (功能很強大,但是已經不更新了)
ASI 使用步驟:
1 獲取 URL
2 獲取 ASI 請求對象
3 發送請求