建立乙個同步的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...