2011-03-04 31 views
7

我在iPhone上使用NSURLConnection的一個實例來請求來自服務器的數據,像往常一樣由委託管理。這些請求非常頻繁(可能每兩分鐘說一次)並且有一個通用和固定的URL。而不是看到NSURLConnection的良好實例每次下載之後被釋放,然後創建一個新問題:重用NSURLConnection的一個實例

  1. 是否有保留第一連接和重用任何價值? (我希望如此,一個好的身份驗證應該值得一千。)

  2. 如果是這樣,我該如何重用它?文檔中的突出方法是-start,但是在NSURLConnection的一個已經使用(和非零)實例上調用時,這似乎會使應用程序崩潰。 [該文檔做說-start「使接收機開始加載數據,如果它有沒有」]

在情況下,它的幫助,關於上述問題,我(是!)提出:

if (connection_ == nil) 
    { 
    connection_ = [NSURLConnection connectionWithRequest:request 
               delegate:self]; 
    } 
    else 
    { 
    [connection_ start]; 
    } 
+0

有趣的問題... :) – Jasarien 2011-03-04 01:28:13

+0

這是一個輕微的重複,請參閱http://stackoverflow.com/questions/886810/nsurlconnection-is-run-many-times。儘管如此,仍然沒有好回答看起來你需要爲自己的課程製作這個任務。 – SK9 2011-03-04 06:11:07

+0

似乎這個問題的答案之一是建議一個HTTP流而不是一次性使用連接。保持一個流,每2分鐘使用它不會是一個好主意。我真的沒有看到發佈和重新創建連接對象的問題。這是不是預優化? – Jasarien 2011-03-04 09:43:31

回答

3

該文檔似乎是說,URL連接保留它的委託(非常規的,但有必要在這種情況下),然後當連接完成加載釋放它,失敗或取消。

問題是,代理不是NSURLConnection上的可設置屬性,因此在發佈後無法重置它。這幾乎使URL連接在運行一次後無用,需要你釋放並重新創建它,如果你想再次使用。

+0

@J:這也是我收集的。我不知道NSURLConnection的替代方案,也許ASI [http://allseeing-i.com/ASIHTTPRequest/]等? – SK9 2011-03-04 05:20:36

+0

我沒有使用'AIHTTPRequest',但我相信它是建立在'NSURLConnection'上的,所以即使你可以重用其中的一個實例,它仍然會釋放並重新創建引擎蓋下的url連接。 – Jasarien 2011-03-04 09:37:02

+0

@J:是否有可能提前創建一個經過身份驗證的NSURLConnection,並延遲執行請求? (即加載槍,準備就緒時觸發。) – SK9 2011-03-04 10:23:29

相關問題