ios中使用asi崩潰的問題解決

2021-06-19 05:09:26 字數 1262 閱讀 4078

在ios開發過程中,asihttprequest庫是最常用的網路庫,功能強大,使用也非常方便。

但是,在使用此庫過程中,發現有幾點小問題。網路上仔細搜尋研究了好久,現記錄於此。

乙個問題是,我發現當非同步請求比較多,併發連線數量比較多的時候,會導致一些請求失敗。

原因:**預設是最大4個併發連線,其他的連線需要等待。然後如果有連線請求完畢了,就會去復用這個連線,但是還會出現連線關閉的情況,這個時候**不會再一次重新請求,導致這次請求失敗,返回nil。

簡單解決:

最簡單的解決就是把復用連線關閉,每次都新建連線就不會出問題。或者一次只允許乙個連線。

asihttprequest裡加入下面** [self setshouldattemptpersistentconnection:no];

另乙個問題是偶爾出現異常,在asihttprequest的startasynchronous呼叫後偶爾出現exc_bad_access異常。

在viewcontroller中是採用委託的方式,即在- (void)viewdidload方法中加入**:[request setdelegate:self]

然後實現其委託方法- (void)requestfinished:(asihttprequest *)request和- (void)requestfailed:(asihttprequest *)request

測試過程中發現,在執行請求未結束時候不斷關閉和開啟此介面,就容易出現exc_bad_access異常。

解決方法:

在stackoverflow.com上,有網友提出了兩個解決方法。

第乙個,使用同一的delegate,並且應用一執行就初始化它。如果其他類要呼叫非同步請求,將delegate發過去。

呼叫方法如下:

- (void)sendurl: (nsstring *) resturl withcallback:(nsobject*) delegate;

然後,在delegate的實現方法中利用request的tag來標識來自哪乙個類的非同步呼叫。

第二個,使用block直接實現非同步請求,拋棄delegate。

使用"setcompletionblock:^"代替delegate的"setdidfinishselector"。

request做乙個設定就可以,比原來通過設定request.delegate再實現delegate的方法簡單多了。

[request setcompletionblock :^];

[request setfailedblock :^];

確實管用

iOS崩潰除錯的使用和技巧總結

在ios開發除錯過程中以及上線之後,程式經常會出現崩潰的問題。簡單的崩潰還好說,複雜的崩潰就需要我們通過解析cras 件來分析了,解析cras 件在ios開發中是比較常見的。現在網上有很多關於解析崩潰資訊的部落格,但是大多質量參差不齊,或者有些細節沒有注意到。今天寫一篇部落格總結一下我對崩潰除錯的使...

關於iOS開發中使用的證書

在建立開發證書和發布證書之前都要到鑰匙訪問串中申請乙個檔案 certificatesigningrequest.certsigningrequest 網上很多人說這個檔案也使用一次,事實上不一定的。公鑰只包含了一半,另一半在申請的.cer的證書中。使用csr檔案製作的證書有兩種 developer和...

IOS8 ARM64下奇怪的崩潰問題

老產品的 裡面使用了algorithmhelper作為加解密方法,md5,des,rsa。一直使用得好好的。後來大部分手機公升級成arm64和ios8系統之後,產品經常莫名其妙的崩潰。人也整崩潰了。使用 遮蔽法,最後定位到 nsdata base64datafromstring text ios7以...