2009-02-18 67 views
3

我正在與一羣迷你遊戲一起玩遊戲。在一個遊戲視圖中,我有以下代碼:UIImage imageNamed第二次給EXC_BAD_ACCESS

UIImage* img = [UIImage imageNamed:@"foo.png"]; 
someImage = CGImageRetain(img.CGImage); 
[img release]; 

someImage是CGImageRef類型的,這在第一次沒有問題。在用戶失去迷你遊戲(或退出)後,遊戲和所有內容似乎都能正常釋放。然後,如果他們回去到迷你遊戲,遊戲被再次構造,該行:

someImage = CGImageRetain(img.CGImage); 

導致一些種類的錯誤......幾乎就像我的UIImage對象得到釋放了。我知道使用[UIImage imageNamed]有一些怪癖,但是我根本無法跟蹤它。任何幫助將不勝感激:)

回答

11

這條線是你的問題;

[img release]; 

在可可的一般慣例是,如果一個函數返回一個對象,並且不包含單詞複製或頁頭,那麼你就不必鬆開。

返回對象的函數通常會將它們添加到自動釋放池中。如果你打算保留這個對象,那麼你應該保留(並在以後發佈)它。如果不是的話,它會自動釋放。

如果您試圖釋放這些對象中的一個,那麼它會導致不良。在這種情況下,我懷疑它正在釋放操作系統認爲它仍然擁有的資源。

This thread包含有關Cocoa下內存管理的更多細節。

+0

這似乎是這樣做的......謝謝:)其中一天,我會得到我需要跟蹤的對象的掛鉤。 :) – Jonas 2009-02-19 15:51:44

相關問題