2011-04-23 38 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创建的对象,并且您试图释放您不属于的对象。

相关问题