2011-04-23 40 views
3

我正在嘗試創建一個遊戲,以便我可以更改其數據並將其保存回來。我收到了兩條註釋行上的錯誤。爲什麼我會收到這些錯誤。我分配了遊戲,所以我必須正確地釋放它。這裏是我的代碼來保存我的遊戲初始化期間存儲的值永遠不會讀取

Game *newGame = [[Game alloc] init];//error 1 
newGame = [gamesArray objectAtIndex:gameNumber]; 
[newGame setTheShotArray:shotArray]; 
[gamesArray replaceObjectAtIndex:gameNumber withObject:newGame]; 
NSString *path = [self findGamesPath]; 
[NSKeyedArchiver archiveRootObject:gamesArray toFile:path]; 
[newGame release];//error 2 

我得到錯誤1,它說,它的初始化過程中存儲到「newGame」值永遠不會讀。

第二個錯誤說調用者此時不擁有的對象的引用計數的錯誤遞減。

這是什麼意思?請不要告訴我,你需要閱讀內存管理,並給我一個鏈接。請告訴我如何解決問題。

+0

什麼是遊戲的基類?你是否在爲你的遊戲使用cocos2d? – 2011-04-23 04:28:45

回答

27
Game *newGame = [[Game alloc] init];//error 1 

由於您使用了+alloc,所以您創建了一個新實例並擁有它。

newGame = [gamesArray objectAtIndex:gameNumber]; 

您從gamesArray獲得另一個實例,並將其分配給在前面的行中使用相同的變量。這意味着你已經失去了對前一個對象的引用,並且由於你擁有前一個對象,所以你有責任釋放它。你沒有,所以你泄漏了那個物體。

[newGame release];//error 2 

在通過從gamesArray這一點newGame指向實例。你沒有擁有它,因爲你沒有通過NARC獲得它,因此你不應該釋放它。

NARC:其名稱包含new,alloc,copyretain的方法。

底線:您正在泄漏您通過+alloc創建的對象,並且您試圖釋放您不屬於的對象。

相關問題