Game *newGame = [[Game alloc] init];//error 1
Вы создаете новый экземпляр, и вы им владеете, поскольку вы использовали +alloc
.
newGame = [gamesArray objectAtIndex:gameNumber];
Вы получаете другой экземпляр из gamesArray
и назначаете его той же переменной, которая былаиспользуется в предыдущей строке.Это означает, что вы потеряли ссылку на предыдущий объект и, поскольку у вас есть предыдущий объект, вы несете ответственность за его освобождение.Вы этого не делаете, поэтому вы пропускаете этот объект.
[newGame release];//error 2
В этот момент newGame
указывает на экземпляр через gamesArray
.Вы не являетесь владельцем этого устройства, поскольку не получили его через NARC, поэтому не следует его выпускать.
NARC: метод, имя которого содержит new
, alloc
, copy
или retain
.
Итог: вы пропускаете объект, созданный вами с помощью +alloc
, и пытаетесь освободить объект, который вам не принадлежит.