iPhone: (id) copyWithZone: (NSZone *) зона: для чего нужна «зона»? - PullRequest
16 голосов
/ 08 января 2011

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

Ответы [ 2 ]

25 голосов
/ 08 января 2011

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

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

1 голос
/ 08 января 2011

Просмотрите справочник по протоколу NSCopying , в частности copyWithZone:

...