EDIT То, что я пытаюсь достичь с помощью кода, заключается в создании массива из 20 уникальных объектов Person. Теперь я знаю, благодаря ребятам ниже, что я уйду от призыва dealloc.Создание массива пользовательских объектов в Objective C
for (int i = 0; i < 20; i++)
{
Person *myPerson = [[Person alloc] init];
myPerson.name = @"Brian";
myPerson.age = [NSNumber numberWithInteger:23];
[myArray addObject:myPerson];
[myPerson dealloc];
}
В процессе обучения Цель C, поэтому почему этот код может показаться вам безумным. Но я прихожу из Java, поэтому моя логика еще не очень хороша для Objective C.
Я пытался заполнить свой массив объектами на 20 человек. Но, кажется, я все время добавляю одного и того же объекта Object. Затем освобождение, которое побеждает точку.
Так что мой вопрос: что было бы правильным способом заполнить массив 20 различными объектами человека. Имена и возраст будут разными в будущем для каждого человека, но в то же время все они будут одинаковыми, пока я буду учиться.
Это единственный способ сделать это, чтобы набрать много кода, как это:
Person *myPerson1 = [[Person alloc] init];
myPerson.name = @"Brian";
myPerson.age = [NSNumber numberWithInteger:23];
[myArray addObject:myPerson1];
Person *myPerson2 = [[Person alloc] init];
myPerson.name = @"Brian";
myPerson.age = [NSNumber numberWithInteger:23];
[myArray addObject:myPerson2];
Person *myPerson3 = [[Person alloc] init];
myPerson.name = @"Brian";
myPerson.age = [NSNumber numberWithInteger:23];
[myArray addObject:myPerson3];
20 раз? Или есть более элегантное решение?
Спасибо за консультацию. -Код
Усиление: единственный раз, когда любая нормальная программа Objective-C вызывается 'dealloc', находится в конце переопределения класса' dealloc', и в этом случае вы будете писать '[super dealloc]'. Любое другое использование почти наверняка неверно. – Chuck
Но разве нельзя сказать, что у меня есть массив, содержащий 20 копий одного и того же объекта (20 указателей на один и тот же объект)? То, что я пытаюсь сделать (и не понимаю, как), добавляет 20 уникальных объектов. – 2010-09-05 20:22:00
@ Код: Нет, у вас нет 20 указателей на один и тот же объект. Новый объект создается каждый раз, когда вы пишете '[[Person alloc] init]', который вы выполняете каждую итерацию цикла. Возможно, это выглядело так: вот что происходит с сломанным кодом, потому что каждый раз, когда вы делят объект, его ячейка памяти была освобождена, а следующий объект был выделен по тому же адресу. – Chuck