99偷拍视频精品区一区二,口述久久久久久久久久久久,国产精品夫妇激情啪发布,成人永久免费网站在线观看,国产精品高清免费在线,青青草在线观看视频观看,久久久久久国产一区,天天婷婷久久18禁,日韩动漫av在线播放直播

iOS網絡開發(3)使用NSURLSession

  • NSURLSession介紹

    專注于為中小企業提供成都網站設計、網站制作服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業紅旗免費做網站提供優質的服務。我們立足成都,凝聚了一批互聯網行業人才,有力地推動了上1000家企業的穩健成長,幫助中小企業通過網站建設實現規模擴充和轉變。

NSURLSession在iOS7.0開始引入,在框架中的地位與NSURLConnection并列

    NSURLSession能夠完成所有NSURLConnection的功能,并且進行了非常大的功能擴充

從iOS9.0開始,蘋果正式棄用NSURLConnection

下圖為NSURLSession的使用過程涉及到的主要類即它們之間的關系

     iOS網絡開發(3)使用NSURLSession

三種工作模式:

     默認會話模式:類似于NSURLConnection,使用磁盤緩存

     瞬時會話模式:不使用磁盤緩存

     后臺會話模式:在程序進入后臺時也能上傳或下載

     NSURLSessionConfigration用于生成這三種工作模式的配置,方法如下

+ (NSURLSessionConfiguration *)defaultSessionConfiguration
+ (NSURLSessionConfiguration *)ephemeralSessionConfiguration
+ (NSURLSessionConfiguration *)backgroundSessionConfigurationWithIdentifier:(NSString *)identifier

NSURLSession會話對象的創建:

// 使用默認會話模式、默認的緩存、cookie及credential
+ (NSURLSession *)sharedSession
// 使用指定的工作模式
+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration*)configuration
// 使用指定的工作模式、任務運行時的隊列、代理
+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration*)configuration delegate:(id<NSURLSessionDelegate>)delegate delegateQueue:(NSOperationQueue *)queue


NSURLSession發送網絡請求的使用步驟:

    a. 創建任務對象

    b. 控制任務的執行

    c. 在block或代理方法中獲得任務執行的結果

支持的三種任務:(任務的基類NSURLSessionTask)

     數據任務  使用NSURLSessionDataTask描述

     下載任務  使用NSURLSessionDownloadTask描述

     上傳任務  使用NSURLSessionUploadTask描述

  • 任務對象的

NSURLSession中的任務對象NSURLSessionTask,全部由NSURLSession對象創建

    強調:異步操作不會阻塞當前代碼的執行,無法通過返回值或參數獲得結果

NSURLSessionTask任務對象的狀態:

@property(readonly) NSURLSessionTaskState state
typedef NS_ENUM (NSInteger, NSURLSessionTaskState ) {
    NSURLSessionTaskStateRunning = 0,     // 運行狀態
    NSURLSessionTaskStateSuspended = 1,   // 掛起狀態
    NSURLSessionTaskStateCanceling = 2, // 取消狀態
    NSURLSessionTaskStateCompleted = 3, // 完成狀態
};

當一個任務對象被創建后,任務的狀態為掛起狀態

控制任務執行(修改任務狀態)的方法:

- (void)cancel     // 取消任務
- (void)resume     // 運行任務
- (void)suspend    // 掛起任務

  • 數據任務 — block方式獲得結果

數據任務創建:

- (NSURLSessionDataTask *)dataTaskWithURL:(NSURL *)url completionHandler:(void (^)(NSData *data, NSURLResponse *response, NSError *error))completionHandler
- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSData *data, NSURLResponse *response, NSError*error))completionHandler

    在block中處理請求后的結果(響應數據、響應對象、錯誤對象)

    如:發送一個GET請求,獲取指定游戲任務信息的JSON數據

NSString *urlStr = @"http://localhost/lolShow.php?number=20&from=0";
NSURL * url = [NSURL URLWithString:urlStr];
NSURLRequest * request = [NSURLRequest requestWithURL:url];
//創建數據任務
NSURLSession * session = [NSURLSession sharedSession];
NSURLSessionDataTask * dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * __nullable data, NSURLResponse * __nullable response, NSError * __nullable error) {
    if ( error ) {
        NSLog(@"1 %@", [error localizedDescription]);
        return ;
    }
    //將JSON數據序列化為OC對象
    NSArray * arr = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
    if ( error ) {
        NSLog(@"2 %@", [error localizedDescription]);
        return ;
    }
    //字典轉模型
    for (NSDictionary * dict in arr ) {
        AMHeroModel * model = [AMHeroModel heroModelWithDict:dict];
        [self.heroInfoArray addObject:model];
    }
    [[NSOperationQueue mainQueue] addOperationWithBlock:^{
        [self stopLoading];//刷新UI
    }];
}];
//啟動任務
[dataTask resume];

  • 數據任務 — 代理方式獲得結果

數據任務的創建:

- (NSURLSessionDataTask *)dataTaskWithURL:(NSURL *)url
- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request

NSURLSession的代理屬性

@property(readonly, retain) id< NSURLSessionDelegate > delegate

    涉及的代理協議: <NSURLSessionDelegate><NSURLSessionTaskDelegate>

          <NSURLSessionDataDelegate><NSURLSessionDownloadDelegate>

數據任務常用的代理方法:

//接收到應答對象
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask*)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler
//接收到數據(可能執行多次)
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask*)dataTask didReceiveData:(NSData *)data
//完成一個請求的應答過程
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error

     

新聞標題:iOS網絡開發(3)使用NSURLSession
本文來源:http://www.yijiale78.com/article8/pcheip.html

成都網站建設公司_創新互聯,為您提供微信公眾號標簽優化網站排名定制網站網站建設

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都定制網站建設