Должен ли я выпустить объект в этом методе? - PullRequest
0 голосов
/ 31 августа 2010

Вот код:

- (id)copyWithZone:(NSZone*)zone {
    ExecutedOrderInfo* copy = [[self class] allocWithZone:zone];
    copy.executedPrice = self.executedPrice;
    copy.executedQuantity = self.executedQuantity;
    return (id)copy;
}

Вопрос в том, нужно ли выпускать «копию» в приведенном выше коде?Или отпустить, когда кто-то это назвал?

Ответы [ 3 ]

3 голосов
/ 31 августа 2010

Нет, не в этом методе. Методы, начинающиеся с copy, должны возвращать неавторизованные объекты с сохранением количества 1. Как и вы.

PS: приведение в return (id)copy не требуется. id - это абстрактный тип объекта и гораздо более общий, чем ваш конкретный класс. Приведения необходимы только в том случае, если имеется конкретный класс, который должен рассматриваться как другой класс - например, подкласс после выполнения проверки подкласса.

PPS: вашему методу не хватает init. Это не хорошо просто alloc экземпляр. Вместо этого сделайте что-то вроде этого: [[[self class] allocWithZone:zone] init];

0 голосов
/ 31 августа 2010

Макс прав. Но все дизайн и намерения зависят от вас. (Даже если обычно copyXXX означает возврат неавторизованного объекта)

А для предотвращения утечек памяти используйте Statics Analysis и Instruments после его использования.

0 голосов
/ 31 августа 2010

Если я правильно читаю ваш код - Нет. Метод не создает объект, поэтому ему не нужно его освобождать.

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