Вопросы о дублировании последнего объекта NSArray
У меня есть NSArray MyObjects.
Я хочу дублировать последний объект моего массива. Другими словами, я хочу добавить новый объект в массив, который точно такой же, как и последний.
Я пробовал с:
id object = [[self arrangedObjects] lastObject];
id newObject = [object copy];
Но я понял, что не могу использовать метод копирования, потому что он не реализован в NSObject.
Должен ли я реализовать метод copy в классе MyObject, возвращая новый экземпляр MyObject и изменив код следующим образом:
MyObject object = [[self arrangedObjects] lastObject];
MyObject newObject = [object copy];
Или есть другие растворимые вещества?
ОБНОВЛЕНИЕ Из документации NSObject
NSObject не поддерживает сам протокол NSCopying. Подклассы должны поддерживать протокол и реализовывать метод copyWithZone:. Версия подкласса copyWithZone: метод должна сначала послать сообщение в super, чтобы включить его реализацию, если только подкласс не происходит непосредственно от NSObject.
2 ответа
Насколько я знаю, если вы хотите скопировать объект, реализуйте протокол NSCopying, который позволяет вам использовать NSObject - (id)copy
метод.
в - (id)copyWithZone:(NSZone *)zone
метод, выделить новый объект, используя + (id)allocWithZone:(NSZone *)zone
затем скопируйте его членов, обновите его состояния и т. д.
Если ваши объекты являются NSObject, вы можете создать новую категорию NSObject, которая реализует протокол NSCopying. Не забудьте перебрать все ключи и скопировать их значение в ваш новый объект. Для глубокого копирования вы также должны вызывать "copy" для каждого из объектов-значений.
Если ваш объект нестандартный, реализуйте протокол в своем классе.
Если у вас есть смешанные объекты в массиве, все они должны реализовывать протокол NSCopying, чтобы вы могли использовать идентификатор<NSCopying>
когда вы объявляете их, чтобы избежать предупреждения / ошибки времени компиляции.