#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 таким образом… (и не только с простыми объектами)… нужно ли нам снова создавать копии?