При реализации этого метода NSCopying в классе для включения копирования используется ли параметр зоны? Если я устанавливаю новый объект, мне не нужно выделять его allocWithZone, так как выделения достаточно... Я запутался...
IPhone: (id) copyWithZone: (NSZone *) zone: для чего нужна зона?
Ответ 1
Это реликвия из старых дней, когда у нас было множество "зон" для размещения. В наши дни все приложения имеют только одну зону, в которой все распределения выделены, но класс NSZone
все еще существует и слишком много код записывается в зависимости от +allocWithZone:
, являющегося основным методом распределения для внесения изменений.
Короче говоря, вы можете полностью игнорировать структуру NSZone
, и единственная причина заботиться о +allocWithZone:
- это то, что вам нужно переопределить ее. Аналогично -copyWithZone:
, вы можете просто игнорировать зону. Если вы этого желаете, вы можете вызвать +allocWithZone:
, проходящего в той же зоне, но это не будет иметь никакого значения.
Ответ 2
Посмотрите Ссылка на протокол NSCopying, в частности copyWithZone: