2010-06-11 98 views
0

此問題的代碼太長,無法使用。但我很確定我的問題與發佈課程有關。對象發佈和分配時機

我有一個幫助器類ConnectionHelper.h/.m,它爲我處理NSURLConnection。基本上,我給它我想要的URL,並返回數據(它也恰好對它做了一個快速的json解析)。它有一個委託給我的調用類(在這種情況下:DownloadViewController)。完成下載後,它會調用[delegate didFinishParseOf:objectName withDictionary:dictionary];。然後在DownloadViewController中釋放ConnectionHelper並分配一個新的以下載下一個對象。

我的問題是,我這樣做了一次,然後它創建第二個連接,然後我的程序只是崩潰。

[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyNever]; 
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self]; 

然後,我不認爲任何下列方法被稱爲:這個電話後

- (NSCachedURLResponse *)connection:(NSURLConnection *)connection 
       willCacheResponse:(NSCachedURLResponse *)cachedResponse 

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge 

所以我是對的,我不是釋放的東西嗎?當我第一次釋放它時,dealloc函數沒有被調用。我有辦法「強制」它釋放嗎?我需要強制它嗎?我認爲這不重要,因爲我爲新的呼叫分配了一個新的ConnectionHelper。他們還會如何重疊/相互衝突?

謝謝。

回答

0

首先,你永遠不會強制釋放。如果你嚴格遵守內存管理規則,那麼你甚至不必擔心它。對於規則請看:

http://developer.apple.com/mac/library/documentation/cocoa/Conceptual/MemoryMgmt/Articles/mmPractical.html#//apple_ref/doc/uid/TP40004447-SW1

如果您的應用程序崩潰它的聲音,我更喜歡的東西被提前釋放。可能是您設置爲連接代表的對象。最後但並非最不重要的你是否看過ASIHTTPRequest來處理連接?這是一個CFNetwork封裝器,使用起來非常簡單,功能非常強大。

希望這有助於。

+0

我一次又一次地檢查了我正在分配和釋放的內容,我沒有看到任何問題。我也看過retainCount,但我不明白是什麼讓它上下。當它成爲另一個班級的代表時,它會上升嗎? (如果是這樣,我如何讓授權課程發佈它?) – RyanJM 2010-06-11 20:22:57

+0

我花了一段時間來追蹤我的錯誤。最後,這是一個內存分配錯誤,但不是我直接使用的文件。在另一個類中,我有一個for循環,其中我使用了快速迭代,併爲(MyObject * tempObj in myArray)做了一個循環,我試圖在循環結束時釋放該對象。隨着規則的執行,我沒有分配它,所以我不應該釋放它。謝謝你的幫助。 – RyanJM 2010-06-14 15:52:31