Этот обновленный код является подозрительным:
Media* nextMedia = [[Media alloc] init];
[self setNextMediaIndex];
if (self.mediaIndex > -1)
{
nextMedia = [mediaArray objectAtIndex: self.mediaIndex];
}
В зависимости от условия в предложении if()
, вы назначаете новое значение для nextMedia , что делает значение, которое вы только что присвоилинедоступен, т. е. не может быть освобожден.
Кроме того, вы не сохраняете значение, полученное из массива, поэтому также не следует освобождать его.Но если предложение if()
не выполняется, у вас все еще есть выделенный вами экземпляр, и его следует освободить.
Это не хорошо.Попробуйте:
Media* nextMedia = [[Media alloc] init];
[self setNextMediaIndex];
if (self.mediaIndex > -1)
{
[nextMedia release];
nextMedia = [[mediaArray objectAtIndex: self.mediaIndex] retain];
}
Вы также можете сделать (и я бы предпочел):
Media *nextMedia;
[self setNextMediaIndex];
if (self.mediaIndex > -1)
{
nextMedia = [[mediaArray objectAtIndex: self.mediaIndex] retain];
}
else
{
nextMedia = [[Media alloc] init];
}
Теперь вы можете выпустить nextMedia , когда это больше не нужно,без какой-либо двусмысленности в отношении удержания.