При реализации этого метода NSCopying в классе для включения копирования, какой параметр зоны используется? Если я устанавливаю новый объект, мне не нужно выделять его с помощью allocWithZone, поскольку alloc достаточно... Я запутался...
iPhone: (id)copyWithZone:(NSZone *)zone : для чего нужна зона?
Ответы (2)
Это пережиток старых времен, когда у нас было несколько «зон» для выделения. В наши дни все приложения имеют только одну зону, в которой выполняются все выделения, но класс NSZone
все еще существует, и слишком много кода написано, чтобы зависеть от него. о том, что +allocWithZone:
является основным методом распределения для внесения изменений.
Короче говоря, вы можете полностью игнорировать структуру NSZone
, и единственная причина заботиться о +allocWithZone:
— если вам нужно ее переопределить. Аналогично с -copyWithZone:
, вы можете просто игнорировать зону. Если хотите, можете вызвать +allocWithZone:
, проходящего в той же зоне, но это ничего не изменит.
person
Lily Ballard
schedule
08.01.2011
Ознакомьтесь с NSCopying Справочник по протоколу, в частности copyWithZone:
person
WrightsCS
schedule
08.01.2011
По крайней мере, на мой взгляд, документация никак не объясняет, что это такое: область памяти, которую можно выделить для нового экземпляра, в лучшем случае расплывчата.
- person Matthew Frederick; 08.01.2011
Это не объясняется, потому что это больше не полезно. В прежние времена у вас часто были разные области памяти или зоны, которые вы могли использовать для хранения вещей, и все, что касалось зон, было связано с этим. В настоящее время современные операционные системы позволяют вам думать обо всем как о большом пуле вещей, к которым может получить доступ все, хотя теоретически зоны все еще используются (например, области памяти с отображением безопасности, махинации с файлами с отображением пользовательской памяти и т. д., но я не уверен если вы даже можете полагаться на зоны, даже работающие больше.
- person Shayne; 28.08.2018