Вопросы о дублировании последнего объекта 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> когда вы объявляете их, чтобы избежать предупреждения / ошибки времени компиляции.

Другие вопросы по тегам