2010-03-22 44 views
2

對不起,如果這之前已經問過,但我想知道NSURLConnection最好的內存管理做法是什麼。 Apple的示例代碼在一種方法中使用-[NSURLConnection initWithRequest:delegate:],然後在connection:didFailWithError:connectionDidFinishLoading:中使用releases,但是這會產生大量分析器警告,並且看起來有點危險(如果這兩種方法都不被調用?)。NSURLConnection的內存管理

我一直autoreleasing(使用+[NSURLConnection connectionWithRequest:delegate:]),這似乎更清潔,但我想知道 - 在這種情況下,是否有可能在連接關閉之前釋放NSURLConnection(例如,下載時一個大文件)?

回答

2

這將返回自動釋放NSURLConnection

+[NSURLConnection connectionWithRequest:delegate:] 

如果你想保持你需要retain它的參考。一旦你完成那麼release它。 對autorelease已經autorelease d對象沒有幫助。

我假設示例代碼會在retainNSURLConnection然後release它連接失敗時,如您的示例所示。

這將返回分配的您,是因爲該方法被命名爲init,採取清潔

-[NSURLConnection initWithRequest:delegate:] 

的照顧對象另一個上面沒有在名稱initcopy所以你不必擔心內存管理。

如果您的對象在內部創建NSURLConnection,然後release s連接完成或失敗時,您應該將nsurlconnection的引用重置爲nil

在你的dealloc你應該清理NSURLConnection,如果它是nil什麼都不會發生,但如果它仍然被分配它將清理它。

請參閱apple doc about memory management - 這很簡單。

+1

謝謝,我問的更具體 - 是否可以自動釋放它(也就是說,在實際完成之前,NSURLConnection'是否可以由autorelease池釋放)? – shosti 2010-03-22 15:26:37