2009-01-24 55 views
4

當我使用泄漏運行我的應用程序並查看任何泄漏的擴展詳細信息時,它將我帶到我的代碼中的特定行,但之後我不知道該怎麼辦!iPhone開發 - 防止泄漏

例如,泄漏顯示一個malloc在該行

NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 

但我不知道問題出在什麼樣的語句!有人能告訴我如何解釋這些問題並避免泄漏。

謝謝。

編輯: 關於我以前的問題,NSZombieEnabled確保沒有對象被釋放,這增加了內存使用量。因此,在使用泄漏進行測試時,請確保將此設置從您的應用中刪除。認爲這可能有助於某人。

回答

3

找到了答案。弗雷德裏克的回答讓我想到了。我創建了一個NSURLResponse和NSError的實例,然後傳遞給sendSynchronousRequest方法。根據iPhone的內存管理文件,這不應該這樣做。我們只需要將對NSURLResponse和NSError對象的引用傳遞給方法,並且方法負責創建和釋放對象。

希望能幫助別人。非常感謝大家的回答。

1

擴展詳細信息窗格將爲您提供堆棧跟蹤,顯示泄漏處的堆棧。一般來說,開始的一個好地方是查看你的代碼在堆棧中的最後一個方法,並且看看你在那裏做了什麼記憶,這聽起來像你可能會過度保留一個對象。從那裏開始

+0

嗨科林。擴展詳細信息窗格不顯示在殭屍對象情況下導致泄漏的類或方法。這就是我發佈這個問題的原因。我如何知道殭屍對象的創建地點?謝謝。 – lostInTransit 2009-01-24 06:15:50

+0

你可以顯示你所看到的截圖嗎?你的iPhone操作系統版本是你的目標? – 2009-01-24 20:17:42

1

您在通話後是否釋放響應和錯誤對象?這些可能在呼叫中分配。

+0

嗨弗雷德裏克。如果我釋放響應和錯誤對象,它會在該位置顯示malloc,再次泄漏!當我回到我的Mac時,我會張貼更多的代碼和日誌。謝謝。 – lostInTransit 2009-01-24 12:34:01

1

上面提到的方法中的泄漏應該是針對iPhone OS 2.2版本修復的。你使用的是哪個版本的iPhone OS?