2011-07-21 202 views
0

這兩行之間有什麼區別,他們在不同的應用程序,但第一個似乎工作,我有第二個問題;我應該選擇哪一個呢?我的應用程序將不斷接收並通過web服務發回數據。iPhone NSURLConnection初始化問題

NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self]; 

NSURLConnection *theConnection = [NSURLConnection connectionWithRequest:request delegate:self]; 

我應該在哪裏釋放連接對象,在每個didFinishLoading之後?但是,那麼每次請求連接都不需要很多時間?

回答

2

第一個是NSURLConnection的實例,您可以獲得該對象的所有權,因此您有責任並因此必須將其釋放。有關ownership reference的詳細信息。

第二個是一個自動發佈的對象,所以你不需要釋放它。當自動釋放池被耗盡時它會自動釋放。

+0

tnx如果我的應用在每次下一次點擊時都會建立連接,那麼最好的地方是釋放它? – Spring

+0

如果你理解了內存管理的正確性,它就會說你必須在你完成使用時釋放你擁有的對象。所以如果你不再需要它們,就釋放它們。 – visakh7

+0

當我從來沒有realese然後後者嘗試連接Web服務總是比第一個連接更快,是一個結果導致連接仍然打開? – Spring

2

第二個創建一個自動釋放的連接,所以如果你沒有明確地保留它,它會消失,你的應用程序可能會崩潰。

你也可以使用,你只需要瞭解iPhone上的objective-c內存管理。

像以前一樣有一個good explanation on the Apple site,它真的值得閱讀和理解,因爲一旦這個便士下降,你再也不會犯同樣的錯誤了。

+0

tnx如果我的應用程序將在每次下一次點擊做連接,最好的地方釋放它? – Spring

+0

你還沒有閱讀和理解,你有;-) – Roger

+0

我的意思是從性能角度:)​​我也使用這個代碼在單身實例 – Spring

2

第一行用init方法創建一個對象,這會使您成爲對象的所有者,因此您必須釋放它。第二行使用了一個方便的構造函數,它不會讓你成爲該對象的所有者。在這種情況下,如果你想操作該對象的生命週期,你必須發送另一條消息來保留它:NSURLConnection * theConnection = [[ NSURLConnection connectionWithRequest:request委託:self] retain],並且對象的計數爲2 ..即使在第二行中,對象自動收到autorelease消息,之後的計數將爲1 ..所以如果您保留對象必須釋放它...

你問:我應該在哪裏釋放連接對象?我認爲在方法connectionDidFinishLoading:連接或在方法連接:didFailWithError: