我正在尝试创建一个游戏,以便我可以更改其数据并将其保存回来。我在注释行中收到两个错误。为什么我会收到这些错误。我分配了游戏,所以我应该正确地发布它。这是我保存游戏的代码
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”的值永远不会被读取。
第二个错误表示调用者此时不拥有的对象的引用计数不正确递减。
这是什么意思?请不要告诉我,您需要阅读内存管理并给我一个链接。请告诉我如何解决这个问题。
Game *newGame = [[Game alloc] init];//error 1
您创建一个新实例并拥有它,因为您已经使用了+alloc
.
newGame = [gamesArray objectAtIndex:gameNumber];
您从以下位置获取另一个实例gamesArray
并将其分配给上一行中使用的同一变量。这意味着您已经丢失了对前一个对象的引用,并且由于您拥有前一个对象,因此您有责任释放它。你没有,所以你泄漏了那个对象。
[newGame release];//error 2
在此刻newGame
通过 from 指向实例gamesArray
。您不拥有它,因为您没有通过 NARC 获得它,因此您不应该释放它。
NARC:名称包含的方法new
, alloc
, copy
, or is retain
.
底线:您正在泄漏通过以下方式创建的对象+alloc
并且您正在尝试释放一个不属于您的对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)