Массив не перезаписывает значения, вы в своем коде. У вас есть один экземпляр MyObjClass. * obj - указатель на эти объекты, и когда вы добавляете его в массив дважды, массив имеет два индекса, которые указывают на объект, который вы добавили дважды.
Устанавливая свойства для obj, вы изменяете значения этого одного объекта, на который указывает и указатель * obj, и массив.
Почему вас беспокоит создание X-объектов? Звучит так, как будто вы хотите, чтобы объекты X находились в массиве с разными значениями.
Помимо создания X-объектов, вы можете скопировать первый объект, установить значения, а затем добавить его в массив, но так как вы все равно устанавливаете все значения, я не уверен, почему вы просто не инициируете новый объект .
EDIT:
Исходя из вашего комментария ниже, похоже, что вы беспокоитесь о нескольких объектах вокруг управления памятью. Когда вы добавляете объект в массив, он сохраняет объект, поэтому после того, как вы добавите его (если вы закончили с этим в этой области), затем отпустите или автоматически освободите его. Когда массив освобожден, он вызовет release для всех объектов в массиве. Вам нужно n объектов, независимо от того, инициализируете ли вы или копируете - у вас все еще есть несколько объектов. Отпустите их, а затем отпустите массив после его освобождения.