объект allocWithZone должен быть освобожден - PullRequest
1 голос
/ 09 мая 2011

Нужно ли освобождать объект, возвращаемый allocWithZone?то есть это так же, как alloc и new?

- (id) copyWithZone: (NSZone *) zone
{
Engine *engineCopy;
engineCopy = [[[self class] allocWithZone:zone]init];

return (engineCopy);
}

Ответы [ 2 ]

1 голос
/ 09 мая 2011

new объединяет alloc и init.Это alloc, который требует освобождения;allocWithZone: почти никогда не следует вызывать напрямую (alloc вызывает его внутри), и в основном используется по старым причинам. Обновление аналогично, copyWithZone: никогда (почти) не следует вызывать напрямую;однако copy будет вызывать его неявно.Внутри copyWithZone:, пожалуй, единственное место, где я когда-либо называл allocWithZone:.

1 голос
/ 09 мая 2011

Да, вам все еще нужно выпустить его.См. Документацию по NSObject: http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html

Если вы используете управляемую память (не сборщик мусора), этот метод сохраняет объект перед его возвратом.Возвращенный объект имеет счет сохранения 1 и не освобождается автоматически.Вызывающий этот метод отвечает за освобождение возвращенного объекта с помощью release или autorelease.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...