2012-05-03 27 views
0

我有以下代碼的存儲器泄漏。 其中self.firstURLConn是@property(非原子,保留)。問題與分配對象和釋放IOS

NSMutableURLRequest* req = [[NSMutableURLRequest alloc] initWithURL:urlcachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:60.0f]; 

self.firstURLConn = [[[NSURLConnection alloc] initWithRequest:req delegate:self] autorelease]; 

[req release];//memory leak here and with self.firstURLConn 

爲什麼內存泄漏這裏

回答

0

firstURLConn將保留您的REQ,REQ時將firstURLConn會釋放REQ只釋放。

1

你有沒有運行產品>分析了嗎?如果您確實請告訴我們內存泄漏問題日誌。

他們不僅會告訴大家,有內存泄漏的問題,而是表明你的代碼導致問題的步驟將你的代碼行。

我建議你與泄漏的工具使用的儀器工具。它將顯示有關您的代碼問題的深入信息。

編輯: REQ變量小姐自動釋放。因爲req已經保留了2次。更改此類代碼

NSMutableURLRequest* req = [[[NSMutableURLRequest alloc] initWithURL:urlcachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:60.0f] autorelease]; 

self.firstURLConn = [[[NSURLConnection alloc] initWithRequest:req delegate:self] autorelease]; 

[req release];//memory leak here and with self.firstURLConn 

由於您的firstURLConn已在保留屬性中聲明。所以,dealloc方法,你應該設置nil這一特性

- (void)dealloc 
{ 
    self.firstURLConn = nil; 
    [super dealloc]; 
} 
+0

在我的問題我提到其中的內存泄漏。 – Mann

+0

讓我來分析一下你的完整代碼。請顯示您的問題類.h和.m代碼。 – Sakares

+0

我已經編輯我的答案,嘗試調整您的代碼。 – Sakares

0

由於委託方法(在將來的某個時候)返回異步,你必須釋放NSURLConnection的委託方法內。刪除autorelease並在完成和失敗的委託方法中添加一個版本。