В copyWithZone: я должен использовать зону для всех ресурсов или только для возвращаемого объекта? - PullRequest
0 голосов
/ 30 марта 2009

Предположим, у меня есть такой класс:

@interface SomeClass : NSObject<NSCopying> {
    SomeOtherClass *obj;
}

В определении copyWithZone :, я делаю это:

SomeClass *someCopy = [[SomeClass allocWithZone:zone] init];

Итак, мой вопрос: если я хочу сделать копию obj, какой из них является правильным / рекомендуемым?

вариант A:

objCopy = [obj copyWithZone:zone];

вариант B:

objCopy = [obj copy];

1 Ответ

3 голосов
/ 31 марта 2009

Если вы используете управление памятью с подсчетом ссылок (не сборщик мусора), вы должны использовать [obj copyWithZone:zone]. Кроме того, вы должны (при тех же обстоятельствах) использовать +allocWithZone: вместо +alloc для размещения копий. Это выделяет память для экземпляров в указанной зоне памяти (см. NSZone). Разработчики могут использовать отдельную зону, если они собираются выделить много объектов, которые больше не будут нужны примерно в одно и то же время. Затем можно восстановить всю зону за одну операцию с помощью NSRecylceZone, что поможет предотвратить фрагментацию памяти. В общем, использование частной зоны не требуется (и, как правило, снижает производительность; профилируйте свой код!). Предполагая, что разработчик хочет получить копию в определенной зоне, я думаю, вы бы предположили, что ему нужны все связанные экземпляры в одной зоне.

Методы -copy и +alloc вызывают методы -copyWithZone: и +allocWithZone: соответственно, минуя зону по умолчанию.

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