2012-05-12 3 views
0

У меня есть модельный класс. Когда я вызываю метод «setter», я устанавливаю некоторые значения String в атрибуты моего объекта. После того, как атрибуты установлены, метод возвращает новый объект, который хранится в NSMutableArray *eintraegeSortiert.Удаление или перестановка указателя

Теперь мне нужен новый объект. Думаю, мне нужно удалить указатель и снова установить его. Если я не удалю указатель, все объекты, хранящиеся в изменяемом массиве, тоже изменятся, и я сохранил один и тот же объект 100 раз в этом изменяемом массиве. Я пробовал по-разному, не получив права. Что я делаю не так? Мой код:

NSMutableArray *eintraegeSortiert = [NSMutableArray array]; 
for (int i = 0; i < ([mArray count]/11) ; i++) { 
     Vertretung *vertretung = [[Vertretung alloc] init]; 
     [eintraegeSortiert addObject:[self setter:mArray :vertretung]]; 
    } 
+0

вы можете объяснить немного больше, чем вы имеете в виду, удалив указатель, так как матовое объясняется шаг по -step, вы каждый раз создаете новый объект. – zahreelay

ответ

1

Я думаю, что вы на самом деле не понимая, как код, который вы написали произведение. Давайте посмотрим на него:

NSMutableArray *eintraegeSortiert = [NSMutableArray array]; 
for (int i = 0; i < ([mArray count]/11) ; i++) { 
    Vertretung *vertretung = [[Vertretung alloc] init]; 
    [eintraegeSortiert addObject:[self setter:mArray :vertretung]]; 
} 

Так шаг за шагом:

NSMutableArray *eintraegeSortiert = [NSMutableArray array]; 

Создает новый изменяемый массив и присваивает его eintraegeSortiert

for (int i = 0; i < ([mArray count]/11) ; i++) { 

Мы собираемся цикла [mArray count]/11 раз.

Vertretung *vertretung = [[Vertretung alloc] init]; 
[eintraegeSortiert addObject:[self setter:mArray :vertretung]]; 

Теперь это создает переменную в текущей области видимости называется vertretung. Вы звоните alloc/init. Это вернет указатель на новый объект Vertretung. Например, это может быть в ячейке памяти 0x12345678. Затем вы добавляете это в массив.

Затем мы доходим до конца текущей области и обходим вокруг цикла for. Это означает, что переменная vertretung выходит за рамки.

Затем, когда вы снова зацикливаетесь, этот же код запускается снова и снова. Но теперь alloc/init создаст совершенно новый объект Vertretung (возможно, указывает на ячейку памяти 0xabcdef00 и добавить что в массив.

Так что нет, это не тот же объект добавляется в несколько раз массив.

Не уверен, что происходит в setter::. - возможно постить, что хорошо, если вы по-прежнему возникают проблемы

+0

Я думаю, что ты прав. Я нашел ошибку. Я зарегистрировал память, и это не тот же объект, который показан снова и снова. Пометьте свой ответ как правильный. – ezcoding

0
NSMutableArray *eintraegeSortiert = [NSMutableArray array]; 
for (int i = 0; i < ([mArray count]/11) ; i++) { 
     Vertretung *vertretung = [[Vertretung alloc] init]; 
     [eintraegeSortiert addObject:[self setter:mArray :vertretung]]; 
     [vertretung release]; 
     vertretung=nil; 

} 
+0

Нет, если он использует ARC. И 'vertretung = nil;' не имеет значения. – mattjgalloway

+1

Я использую ARC. Я пробовал это. Мне не разрешено делать это так :( – ezcoding

Смежные вопросы