ASIHTTPRequest學習 (一)

來源:互聯網
上載者:User

ASIHTTPRequest架構是優秀的第三方Objective-C的HTTP架構,支援Mac OS X和iOS下的HTTP開發。

一、ASIHTTPRequest架構的安裝和配置

(1)首先要在項目工程中匯入相關的檔案,包括:ASIHttpRequest檔案夾和Reachability檔案夾。

(2)要匯入相關的支援類庫和架構。包括:

CFNetwork.framework

SystemConfiguration.framework

MobileCoreServices.framework

libz.dylib

(3)由於ASIHTTPRequest是不支援ARC的,所以在添加了ARC特性的項目中就會出現ARC報錯,解決的方法也很簡單,對ASIHTTPRequest的相關檔案添加ARC特性,做法就是在target中選擇Build
Phases,再選擇compile sources中ASIHTTPRequest的檔案,雙擊彈出對話方塊,添加參數“-fno-objc-arc”。問題解決。

二、同步請求

首先需要匯入ASIHTTPRequest標頭檔。

NSString *urlString = @"*****";    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:urlString]];    [request startSynchronous];    NSError *error = [request error];    if (!error) {        NSData *data = [request responseData];                NSString *string = [request responseString];    }

這是一段簡單的同步請求的代碼。其中的responseData返回的是位元據,而responseString返回的是文本資料。

三、非同步請求

附註:我們運行程式,如果網速很慢,查詢的時候會一直黑屏,直到請求結束畫面才出現,這樣使用者體驗很不好。因此同步請求一般只是在某個子線 程中使用,而不在主線程中使用。非同步請求的使用者體驗要比同步請求好,因此一般情況下非同步請求用的很多。等待過程中在狀態列上會出現網路等待指標的經典旋
轉小表徵圖,而使用ASIHTTPRequest非同步請求就實現這些效果,不用自己額外編寫代碼。

非同步請求需要實現代理方法

NSString *urlString = @"*****";    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:urlString]];    [request setDelegate:self];    [request startAsynchronous]; 

需要實現兩個代理方法:

- (void)requestFinished:(ASIHTTPRequest *)request {    NSData *data = [request responseData];        NSString *string = [request responseString];}- (void)requestFailed:(ASIHTTPRequest *)request {    NSError *error = [request error];    if (error) {        NSLog(@"request failed");    }}

這兩個方法是預設的回調方法,從伺服器擷取資料成功就回調第一個方法,否則回調第二個方法。當然也可以自己定義回調方法。

[request setDidFinishSelector:@selector(requestSuccess:)];    [request setDidFailSelector:@selector(requestError:)];

然後再實現這兩個自訂的回調方法。

- (void)requestSuccess:(ASIHTTPRequest *)request {    NSData *data = [request responseData];        NSString *string = [request responseString];}- (void)requestError:(ASIHTTPRequest *)request {    NSError *error = [request error];    if (error) {        NSLog(@"request failed");    }}

在非同步請求中往往為了代碼更加簡潔可以使用代碼塊(block),在代碼塊中指定回調方法。

NSString *urlString = @"*****";    __weak ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:urlString]];    [request setCompletionBlock:^{        // Use when fetching text data        NSString *responseString = [request responseString];        // Use when fetching binary data        NSData *responseData = [request responseData];    }];        [request setFailedBlock:^{        NSError *error = [request error];        if (error) {            NSLog(@"request failed");        }    }];        [request startAsynchronous];   

四、請求隊列


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.