說明:本文主要介紹網絡程式設計中常用架構asi的簡單使用。
一、asi簡單介紹
asi:全稱是asihttprequest,外号“http終結者”,功能十分強大。
asi的實作基于底層的cfnetwork架構,是以運作效率很高。可惜作者早已停止更新,有一些潛在的bug無人去解決
asi的github位址
<a href="https://github.com/pokeb/asi-http-request">https://github.com/pokeb/asi-http-request</a>
asi的使用參考
<a href="http://www.cnblogs.com/dotey/archive/2011/05/10/2041966.html">http://www.cnblogs.com/dotey/archive/2011/05/10/2041966.html</a>
<a href="http://www.oschina.net/question/54100_36184">http://www.oschina.net/question/54100_36184</a>
二、asi的使用
1導入
下載下傳并導入asi架構,注意該架構依賴于reachability.
導入架構後,如果編譯的話會出現一大堆的錯誤。其中一個最主要的原因是因為該架構是非arc的。
思考:如果一個架構,其中很多檔案都是非arc的,那麼應該如何進行設定?
在這裡,介紹最傻瓜的一種方法,通過進行如下的一些設定以解決問題。(注意:對于所有的asi架構中得檔案都需要進行此番設定)
設定完成後,還存在一些錯誤。産生這些錯誤的原因是asi架構它依賴于下面的幾個架構,把需要的架構添加後再編譯,就不會有問題了。
添加依賴的架構:
把所需的三個架構逐個添加到項目中
2發送網絡請求(同步和異步*get和post請求)
示例程式代碼:
程式說明:
(1)同步發送請求列印的消息
(2)異步發送請求
asi以異步的方式發送網絡請求有三種方式,第一種是通過代理進行監聽;第二種方法是通過block進行監聽。還有一種方法時使用selector,這是建立在設定代理的基礎之上的,調用的方法會覆寫代理方法。
第一種方法:
第二種方法:
第三種方法:
提示:block是ios4之後才引入的技術。
這兩種方法各有優缺點
說明:如果要同時發送多個請求,他們都設定控制器為自己的代理,這樣需要進行一些必要的判斷。而如果各自都是有block這樣的方式的話,那麼将不會存在這些問題,多個請求之間互相不存在幹擾。
新的問題:如果又有block又設定了代理,那麼情況是什麼樣子的呢?
答案是block和相關的代理方法都會被調用。
(3)補充
提示:asi中已經考慮到了線程安全的問題。
3.發送post請求。
代碼:
注意需要包含一個頭檔案
内部預設就是post的。
注意add和set的差別,一個是添加(适用于多值參數),一個是覆寫(内部先remove,再add)。
伺服器接收到的請求資訊: