2011-06-13 20 views
2

我使用ASIHTTP作爲委託使用我的視圖控制器運行一個http請求,如果用戶在請求完成之前離開視圖控制器,我會在ASIHTTP代碼中獲得一個EXC_BAD_ACCESS正在做一個if(委託...)ASIHTTP - 離開視圖並得到EXC_BAD_ACCESS

在我的視圖控制器dealloc中有什麼我必須做的嗎?如果用戶離開,我只想簡單地刪除請求。

+2

這通常是您的代碼有問題。發佈一些,我們會試着破譯這個問題。 – esqew 2011-06-13 01:24:13

+0

如果發生崩潰,則會出現回溯或崩潰日誌。發表它。 – bbum 2011-06-13 05:40:19

回答

5

像這樣的問題最常見的原因是ASIHTTPRequest對象仍處於活動狀態,並且其委託字段指向一個現在銷燬的對象。當ASIHTTPRequest嘗試告訴代理請求已完成時,EXC_BAD_ACCESS將會發生,依此類推。

你的dealloc方法爲是asihttprequest代表應具備的對象:

request.delegate = nil; 
[request cancel] 
[request release] 

如果你有在同一時間只有一個請求有效,你必須有相同的代碼的任何地方,你開始一個新的請求,以確保任何以前的請求被正確取消。

如果您有多個請求處於活動狀態,則需要跟蹤所有請求,並取消它們全部的委託。

作爲參考,我一直在使用ASIHTTPRequest約18個月,並且已經爲與取消請求有關的困難競賽條件提供了一些修復。

+0

您不必釋放請求。 – peterp 2011-06-13 08:18:10

+0

@peterp不知道我明白了:如果你不釋放請求,你會得到一個內存泄漏。 (並且您必須保留請求,否則您無法保證它仍然會在您的dealloc方法中取消。) – JosephH 2011-06-13 08:22:43

+0

@josephH您不必保留它,因爲您不必保證它應該在你的dealloc方法中。如果它不在dealloc方法中,那麼你就再也沒有問題了。 – peterp 2011-06-13 08:25:16