IPhone: (id) copyWithZone: (NSZone *) zone: для чего нужна зона?

При реализации этого метода NSCopying в классе для включения копирования используется ли параметр зоны? Если я устанавливаю новый объект, мне не нужно выделять его allocWithZone, так как выделения достаточно... Я запутался...

Ответы

Ответ 1

Это реликвия из старых дней, когда у нас было множество "зон" для размещения. В наши дни все приложения имеют только одну зону, в которой все распределения выделены, но класс NSZone все еще существует и слишком много код записывается в зависимости от +allocWithZone:, являющегося основным методом распределения для внесения изменений.

Короче говоря, вы можете полностью игнорировать структуру NSZone, и единственная причина заботиться о +allocWithZone: - это то, что вам нужно переопределить ее. Аналогично -copyWithZone:, вы можете просто игнорировать зону. Если вы этого желаете, вы можете вызвать +allocWithZone:, проходящего в той же зоне, но это не будет иметь никакого значения.