3

データを変更して保存できるように、ゲームを作成しようとしています。コメント行にある 2 つのエラーが表示されます。これらのエラーが発生するのはなぜですか。ゲームを割り当てたので、正しくリリースする必要があります。これが私のゲームを保存するための私のコードです

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

初期化中に 'newGame' に保存された値が読み取られないというエラー 1 が表示されます。

2 番目のエラーは、この時点で呼び出し元が所有していないオブジェクトの参照カウントのデクリメントが正しくないことを示しています。

これは何を意味するのでしょうか?そして、私に言わないでください。メモリ管理について読んで、リンクを教えてください。問題を解決する方法を教えてください。

4

1 に答える 1

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

新しいインスタンスを作成し、使用して以来、それを所有しています+alloc

newGame = [gamesArray objectAtIndex:gameNumber];

から別のインスタンスを取得 gamesArrayし、前の行で使用したのと同じ変数に割り当てます。これは、以前のオブジェクトへの参照を失ったことを意味します。以前のオブジェクトを所有しているため、それを解放する責任があります。そうではないので、そのオブジェクトをリークしています。

[newGame release];//error 2

この時点newGameで、 from を介してインスタンスを指していますgamesArray。NARC 経由で取得していないため、所有していないため、リリースしないでください。

NARC: 名前にnewalloccopy、または が含まれるメソッドretain

結論: 作成したオブジェクトをリークしていて+alloc、所有していないオブジェクトを解放しようとしています。

于 2011-04-23T04:30:27.513 に答える