Я создаю массив NSMutable следующим образом:Стопорные элементы в NSArray
-(NSArray*)createArrayFromString:(NSString*)str
{
NSArray *arr = [str componentsSeparatedByString:@" "];
NSMutableArray *result = [NSMutableArray arrayWithCapacity:[arr count]];
for(NSString *s in arr){
if([s length]>0){
[result addObject:[s retain]];
}
}
return (NSArray*) result;
}
Вот вызывающий метод, который помещает полученные элементы массива в собственность resRefs объекта Глава:
-(Chapter*)createChapter:(CXMLNode*)node
{
Chapter *chapter = [[Chapter alloc] init];
chapter._id = [[(CXMLElement*)node attributeForName:@"id"] stringValue];
chapter.title = [[(CXMLElement*)node attributeForName:@"title"] stringValue];
chapter.text = [node stringValue];
[chapter.pids addObjectsFromArray:[self createArrayFromString:[[(CXMLElement*)node attributeForName:@"pids"]stringValue]]];
[chapter.resRefs addObjectsFromArray:[self createArrayFromString:[[(CXMLElement*)node attributeForName:@"resRefs"]stringValue]]];
return chapter;
}
Вот вопрос:
Без удержания вызова в
[result addObject:[s retain]];
Я не могу получить доступ к элементам NSString из моего ViewController (EXC_BAD_ACCESS)
Правильно ли я с помощью сохранить здесь?
EDIT:
Изменено
[[result addObject:s] retain];
в
[result addObject:[s retain]];
2-я линия была первоначально в моем коде. Убрано сохранить и вставить его обратно в неправильное место при публикации этого вопроса. По-прежнему, сохраняя здесь работу, оставляя ее, нет.
EDIT 2:
Обнаруженный анализатор (CMD + SHIFT + B), нашел несколько утечек памяти, удалил их и EXC_BAD_ACCESS ушел. Спасибо вам всем за помощь!
100% согласен, управление памятью обрабатывается MutableArray, это не ваша проблема! – AsTeR
Спасибо за намек на то, что вам не нужно бросать NSMutableArray. Я не знал об этом. Я уже прочитал Политику управления памятью, но пока документ достаточно информативен, он все еще оставляет некоторые вопросительные знаки в моей голове :) – roplacebo
см. Мое редактирование для некоторых дополнительных предложений для вашего кода. – vikingosegundo