2012-02-04 80 views
0

我使用NSURLConnection類來獲得在互聯網上的一些數據,我的應用程序得到在某個時刻崩潰,我得到一個錯誤表明我已經雙重釋放的對象,Shoud我釋放NSURLConnection實例變量?

以下是我創建的一個實例NSURLConnection我如何釋放它:

NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self]; 
[connection release]; 

我應該釋放它時,即時通訊使用它做,對嗎?或者它在幕後發佈?

編輯

現在,我得到這個問題整理出來,只是我做的NSURLConnection實例爲伊娃和它的dealloc釋放,這裏的代碼

頭文件:

// .... 
NSURLConnection *connection; 

@property (nonatomic, retain) NSURLConnection *connection; 

執行文件:

// ... 
NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
self.connection = [[NSURLConnection alloc]initWithRequest:request delegate:self]; 
// ... 

-(void)dealloc{ 
    [connection release]; 
    [super dealloc]; 
} 

問題是我沒有在分配新連接之前釋放舊連接,這是通過在伊娃之前添加自己來完成的。

+1

考慮在您的項目中使用ARC,它將有助於這樣的情況。 – 2012-02-04 22:46:34

+0

我總是用它來釋放它裏面connectionDidFinish加載或connectionDidLoadWithError(不知道確切的名稱,但你必須有一個想法)...因爲這兩種方法都有你正在使用的當前連接的參數... – doNotCheckMyBlog 2012-02-04 23:50:51

+0

你的意思是沒有必要如果我設法在didFinishLoading和didFinishWithErro中釋放它,可以在dealloc方法中釋放它?謝謝 – 4mahmoud 2012-02-05 14:19:17

回答

1

因爲alloc/init和release是平衡的,所以會立即釋放並釋放。

所以,不,這不是你想要的。

請提供更多關於connection的代碼。你在做什麼?

很可能你會希望將它寫入屬性並在dealloc中發佈。

請確保您瞭解Management Rules。這是至關重要的。

0

如果你(顯然)不使用ARC,你有兩個選擇:

一)堅持連接的引用並釋放在適當的時候

B)還可以釋放委託方法連接 - 分析儀會給你警告,如果你這樣做

第一個選項通常更容易維護,特別是如果你在一個對象中使用多個連接。

如果這是一個新項目,考慮使用ARC(正如Richard J. Ross III已經提到的那樣)。