2011-01-28 66 views
0

這裏是另一個新手問題。使用外部類的ASIHTTPRequest

我想從一個外部類調用ASIHTTPRequest(因爲我已經在我的主類使用它),我做這樣的事情:

ASIHTTPNSFabExt *nRequest = [[ASIHTTPNSFabExt alloc]init]; 

nRequest.URL = @"http://something"; 
nRequest.var1 = [dictionaryRecord objectForKey:@"something"]; 
nRequest.var2 = [dictionaryRecord objectForKey:@"something"]; 
[nRequest saveComment]; 

凡saveComment方法執行ASIHTTPRequest任務。

除了當我嘗試在我的主類內執行[nRequest發佈]時,一切都工作正常,它將在ASIHTTPRequest方法內部產生一個錯誤。

在我發佈之前保留計數爲1,autorelease也不起作用:我確定我錯過了一些內存管理基礎知識,但是能否幫助我找到正確的方法來操作它?

Thanx提前

法布里奇奧

回答

0

沒有什麼明顯的錯誤與您目前爲止發佈的代碼。問題可能出在您處理ASIHTTPNSFabExt中init/dealloc方法中對ASIHTTPRequest對象的引用。

將ASIHTTPRequest包裝到另一個Objective-C類中並沒有什麼特別的 - 只是標準確保你在正確的點保留/釋放對象,並且在你釋放它之後不使用它。

我認爲你是一個聰明的人,所以你幾乎可以肯定使用標準的技術來調試iOS上的內存問題。

首先,啓用NSZombies;檢查控制檯/應用程序停止的位置,幾乎肯定會發現一條錯誤消息,說:「消息發送到釋放對象」,以及一個回溯,告訴你確切的哪一行代碼試圖發送該消息。

然後,你只需要弄清楚爲什麼那行代碼發送到一個釋放對象。它可能是一個缺少的「保留」或「釋放」太早,或者沒有將nil分配給持有該對象的實例變量。

- 編輯 -

另外值得一提的是,你應該確保你從ASIHTTPRequest刪除委託在你的dealloc方法,否則可能嘗試調用後,已釋放你的類 - request.delegate = nil;[request clearDelegatesAndCancel];

+0

我不知道我完全理解你的回覆,但我認爲最後一部分是問題,因爲我不刪除ASIHTTPRequest委託,我認爲它叫他們創立nRequest發佈。我看不到代碼的哪一部分會生成「解除分配的對象」,這是ASIHTTPRequest中的一個方法,但我無法理解它。無論如何THANX – Fabrizio 2011-01-28 15:45:35