ASIHttpRequest 接收的使用方法

2021-06-25 20:39:13 字數 2634 閱讀 1818

建立乙個同步的request:

最簡單的方式來使用asihttprequest。呼叫startsynchronous執行該請求的資訊將在同乙個執行緒內完成,返回狀態為成功或者失敗。

當response為字串時,呼叫[ request responsestring]  

當response為資料時,呼叫[request responsedata]

例子:[plain]view plain

copy

- (ibaction)graburl:(id)sender    }

建立乙個非同步的request:

和同步的例子差不多,但是非同步是在後台執行

注意我們設定request的委託,是為了我們能接收當request成功或者失敗的通知。

這是一種簡單的非同步請求,他將返回乙個全域性nsoperationqueue。對於乙個複雜的操作(如跟蹤多個request的進度),你應該建立自己的佇列,我們將在後面講解。

使用blocks

[plain]view plain

copy

- (ibaction)graburlinbackground:(id)sender  

];  

[request setfailedblock:^];  

[request startasynchronous];  }

注意,用_block 來修飾request。這樣告訴block 不是retain這個request,防止迴圈retain。這樣做的目的是retain是這乙個bolck;

注:關於這個block翻譯的不准。如有需要請再查閱其他資料。

使用佇列:

這個例子同樣做了同一件事情,但是我們為request建立了乙個nsoperationqueue。

用乙個nsoperationqueue(或者asinetworkqueue,稍後會看到)會對非同步請求有更多的操作。當使用佇列可以有一定數量的request在同一時間執行。如果你加入超過maxconcurrentoperationcount這個屬性的數量時,在佇列外request就會等待佇列裡的request完成後才開始。

在上面的例子中「queue」是自己controller 的 nsopeartionqueue的乙個例項。

我們自己設定的自定義的方法來處理請求成功或者失敗。如果你不設定將會呼叫預設的方法(requestfinished或者requestfailed)。

在委託方法裡對多個請求成功或失敗進行處理:

如果你要處理不同型別的請求,有以下幾種方法:

1.如果你的請求都是同一型別,但是你想區分它們,你可以用nsdictionary來儲存request。然後在對應的委託方法中得到它們。還可以用tag屬性來替代。這兩個屬性都不會傳送到伺服器。

2.如果你想以完全不同處理的處理方式處理成功或失敗,對每個request 設定對應的setdidfinishselector setdidfailselector方法。

3.對於更複雜的request,或者你想在後台解析response。你可以自己寫乙個asihttprequest的子類,重寫requestfinished:andfailwitherror:

關於asinetworkqueues

asinetworkqueues是nsoperationqueue的乙個子類,他提供了一些額外的功能。

requestdidstartselector:

每當佇列裡的乙個request開始時呼叫此方法。

ASIHttpRequest 傳送資料

傳送資料 request addrequestheader referer value 檔案中的資料是需要時才從磁碟載入,所以只要web server能處理,那麼上傳大檔案是沒有問題的。asiformdatarequest request asiformdatarequest requestwith...

ASIHTTPRequest 進度追蹤

每個asihttprequest有兩個delegate用來追蹤進度 uploadprogressdelegate 上載 進度delegate可以是nsprogressindicators mac os x 或者 uiprogressviews iphone asihttprequest會自適應這兩個...

ASIHttpRequest 傳送資料

傳送資料 request addrequestheader referer value 檔案中的資料是需要時才從磁碟載入,所以只要web server能處理,那麼上傳大檔案是沒有問題的。asiformdatarequest request asiformdatarequest requestwith...