Попытка реализовать NSCopying в первый раз, и у меня есть вопрос о subleties из NSZone:Могу ли я использовать тот же NSZone дважды?
- (id)copyWithZone:(NSZone *)zone {
MyClass *copy = [[[self class] allocWithZone:zone] init];
copy.array = [[self.array mutableCopyWithZone:zone] autorelease];
return copy;
}
В этом примере я использую NSZone дважды: сначала выделить объект, а затем снова выделить копия массива. Является ли это законным? Это необходимо? Я мог бы просто сделать mutableCopy, и я также рассматриваю использование -initWithArray: copyItems: как возможную альтернативу.
Каков наилучший способ? Не стесняйтесь идти в любом случае на вопрос: «Нужно ли, чтобы объекты результирующего массива были мелкой или глубокой?» Ключ для меня - безопасно ли использовать NSZone два раза.
Привет, вы не уверены, что вы правы, спасибо. Не могли бы вы рассказать о том, как это влияет на NSCopying? Я больше * смущен, чем раньше. Причина для соответствия NSCopying заключается в том, что вы можете сказать [aDictionary setObject: x forKey: myNSCopyingObject]. То, что вы говорите о NSZone, ставит под вопрос, как правильно соответствовать протоколу. Очевидно, я только начал с шаблона Apple, который, по-видимому, они не обновили. – SG1
@ SG1: Это то же самое для копирования, что и для создания оригинальных объектов. Вы можете использовать зону, по крайней мере номинально (так как зоны больше ничего не делают), или притворяются, что зоны не существуют, и просто используйте 'alloc' /' copy'/'mutableCopy' в вашей реализации. Твой выбор. –