некоторая проблема с переменными в objective-c

#objective-c #ios #variables #memory

#objective-c #iOS #переменные #память

Вопрос:

Вот что я делаю :

     [imageTag.mediaTags addObject:unitTag];
    [imageTag.allTags addObject:unitTag];

    unitTag.title=@"";
    unitTag.link=@"";
    unitTag.description=@"";
    unitTag.price=@"";
    unitTag.imageLink=@"";
  

Проблема в том, что как только я выполняю execute за пределами строки 2, значения, сохраненные в массиве, тоже теряются (я использовал GDB для печати и понял это). Теперь дело в том, что я повторно использую объект unitTag для ввода некоторой информации и сохранения этой информации внутри массива. Итак, какие у меня есть варианты? Мне нужно удалить значения, потому что некоторые значения являются необязательными, и я не хочу все испортить.

Кто-нибудь, пожалуйста, любезно дайте мне знать? Спасибо.

Комментарии:

1. Являются imageTag.mediaTags и imageTag.allTags возможно nil ?

2. что ж, после завершения «AddObject» я печатаю «objectAtIndex» и получаю значения. и imageTag — это NSMutableArray, который инициализируется. Только после выполнения последних 5 строк я получаю <объект вернул пустое описание> штуковину: (

Ответ №1:

Если я правильно понимаю, вам нужно сделать копию объекта UnitTag и вставить его в массив. Вы просто сохраняете ссылку на объект в массиве, а затем переназначаете значения, которые использует ссылка.

addObject сохраняется не копия, а фактическая ссылка на объект.

Чтобы сделать копию, вам нужно создать новый объект, который является unitTag, а затем добавить его. Таким образом, потенциально ваш код может быть:

 id unitTagCopy = [unitTag createCopy];
[imageTag.mediaTags addObject:unitTagCopy];
[imageTag.allTags addObject:unitTagCopy];
  

Вам пришлось бы добавить метод CreateCopy. Я полагаю, это может быть:

 -(id) createCopy {
    MyObj* obj = [[[MyObj] init] alloc] autorelease];
    obj.title= self.title;
    obj.link= self.link;
    obj.description= self.description;
    obj.price= self.price;
    obj.imageLink= self.imageLink;
    return obj;
}
  

Комментарии:

1. @SB: как мне это сделать? любая помощь?

2. Я обновил ответ. Метод CreateCopy будет отправлен в ваш файл myObj.m. Я предполагаю, что unitTag имеет тип myObj

3. Обратите внимание, что для этого есть протокол: NSCopying .

4. @SB : спасибо… но что происходит, когда мы копируем NSMutableArrays таким образом… (и не только с простыми объектами)… нужно ли нам снова создавать копии?