Вы можете использовать copy, но для этого потребуется, чтобы класс Player
соответствовал протоколу NSCopying
, что, я сомневаюсь, в этом.
Самый простой (и, вероятно, лучший) способ сделать это здеськак таковой:
if ([array count] == 1)
{
player = [[array objectAtIndex:0] retain];
}
[request release];
return [player autorelease];
Вы удерживаете игрока от освобождения на время, сохраняя его, а затем, когда вы возвращаете его, вы используете autorelease
.Это не является строго необходимым, но я думаю, что это хорошая практика программирования в этом случае.Это связано с тем, что имя вашей
+ (Player *)loadPlayerWithPredicate:(NSString *)name:(NSInteger)index;
подразумевает (в стандартной практике Obj-C), что возвращаемый объект автоматически освобождается, что оставляет управление памятью объекта до вызывающей стороны.
В классе, который вы называете + (Player *)loadPlayerWithPredicate:(NSString *)name:(NSInteger)index
, вам нужно будет определить, хотите ли вы сохранить возвращенного Игрока (например, установить его для свойства сохранения), или вы хотите оставить его как есть (автоматически освобожден, и, таким образом,вероятно, будет выпущен после того, как метод, в котором этот вызов завершен, используйте его, если вам нужно только выполнить несколько действий с ним немедленно и не нужно удерживать его после).