官方網站: http://allseeing-i.com/ASIHTTPRequest/ 。能夠從上面下載到最新源碼,以及獲取到相關的資料。 ios
使用iOS SDK中的HTTP網絡請求API,至關的複雜,調用很繁瑣,ASIHTTPRequest就是一個對CFNetwork API進行了封裝,而且使用起來很是簡單的一套API,用Objective-C編寫,能夠很好的應用在Mac OS X系統和iOS平臺的應用程序中。ASIHTTPRequest適用於基本的HTTP請求,和基於REST的服務之間的交互。 緩存
ASIHTTPRequest功能很強大,主要特點以下: 網絡
若是想在iOS項目中使用ASIHTTPRequest,須要在項目中進行簡單的配置,步驟以下: 異步
1) 添加文件往一個Xcode項目中添加第三方類庫文件,有兩種方式: post
1. 第一種方式,在Finder中打開須要添加到文件或文件夾,在Xcode中打開要添加文件的項目,而後選中要添加的文件或文件夾,將它從Finder中拖到Xcode中,而後釋放。在彈出的對話框中,若是文件已經拷貝到了項目文件目錄中,則不須要選中「Copy items」的複選框;若是文件沒有拷貝到項目文件目錄,就須要選中「Copy items」的複選框,這樣Xcode會自動把文件複製到項目文件目錄下。以下圖所示:
學習
2. 第二種方式,在Xcode中,在要添加文件的分組下點右鍵,選中「Add Files to 「My Project」…」菜單,在彈出的文件瀏覽對話框中選中要添加到文件或文件夾。若是要添加文件已經拷貝到了項目文件目錄中,則不須要選中「Copy items」的複選框;若是文件沒有拷貝到項目文件目錄,就須要選中「Copy items」的複選框,這樣Xcode會自動把文件複製到項目文件目錄下。以下圖所示:
網站
根據上面的說明,添加ASIHTTPRequest相關文件到Xcode項目中,所需文件列表以下: ui
ASIHTTPRequestConfig.h url
ASIHTTPRequestDelegate.h
ASIProgressDelegate.h
ASICacheDelegate.h
ASIHTTPRequest.h
ASIHTTPRequest.m
ASIDataCompressor.h
ASIDataCompressor.m
ASIDataDecompressor.h
ASIDataDecompressor.m
ASIFormDataRequest.h
ASIInputStream.h
ASIInputStream.m
ASIFormDataRequest.m
ASINetworkQueue.h
ASINetworkQueue.m
ASIDownloadCache.h
ASIDownloadCache.m
ASIAuthenticationDialog.h
ASIAuthenticationDialog.m
Reachability.h (在源碼的 External/Reachability 目錄下)
Reachability.m (在源碼的 External/Reachability 目錄下)
2) 連接相關類庫1. 選中項目
2. 選中目標
3. 跳轉到「Build Phases」標籤
4. 展開「Link Binary With Libraries」分組
5. 點擊「+」添加類庫
以下圖所示:
6. 從列表中選擇CFNetwork.framework,而後點擊「Add」按鈕。
7. 按照上一步相同的方法添加:SystemConfiguration.framework, MobileCoreServices.framework,CoreGraphics.framework和libz.1.2.3.dylib這幾個類庫。
8. 添加完後,能夠將添加好的一塊兒類庫拖到Xcode項目的Frameworks目錄下
ASIHTTPRequest有不少功能,全部功能說明均可以在其官方網站的相關文檔中查到,限於篇幅,本章僅簡單介紹一下如何使用ASIHTTPRequest來進行同步Http請求和異步Http請求。在後面的章節中,咱們還會用到它的一些其餘功能。
在使用ASIHTTPRequest以前,請確認已經正確安裝,而後在須要應用它的代碼文件頭部,加入:
#import 「ASIHTTPRequest.h」
這樣就能夠在代碼中使用ASIHTTPRequest相關的類。
建立一個同步請求這是ASIHTTPRequest最簡單的一種使用模式,發送startSynchronous消息後即開始在同一線程中執行HTTP請求,線程將一直等待直到請求結束(請求成功或者失敗)。經過檢查error屬性能夠判斷請求是否成功或者有錯誤發生。
要獲取返回的文本信息,調用responseString方法。若是下載的是二進制文件,例如圖片、MP3,則調用responseData方法,能夠獲得一個NSData對象。
- (IBAction)grabURL:(id)sender
{
NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request startSynchronous];
NSError *error = [request error];
if (!error) {
NSString *response = [request responseString];
}
}
通常狀況下,應該優先使用異步請求代替同步請求,當在主線程中使用ASIHTTPRequest同步請求,應用程序的界面會鎖定,沒法進行任何操做,直到請求完成。
建立一個異步請求上例中的同步請求,若是換成異步方式來調用,請求是在後臺線程中運行,當請求執行完後再通知調用的線程。這樣不會致使主線程進行網絡請求時,界面被鎖定等狀況。
- (IBAction)grabURLInBackground:(id)sender
{
NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDelegate:self];
[request startAsynchronous];
}
- (void)requestFinished:(ASIHTTPRequest *)request
{
// 當以文本形式讀取返回內容時用這個方法
NSString *responseString = [request responseString];
// 當以二進制形式讀取返回內容時用這個方法
NSData *responseData = [request responseData];
}
- (void)requestFailed:(ASIHTTPRequest *)request
{
NSError *error = [request error];
}