Контроллер навигации: Хранение контроллеров против моделей - PullRequest
1 голос
/ 26 мая 2010

У меня есть навигационный контроллер с табличным представлением. В большинстве учебных пособий, которые я читал, у них обычно есть массив контроллеров представлений (или подклассов), хранящихся локально в контроллере табличных представлений, который они используют для добавления в стек навигации при выборе ячейки таблицы.

В моем текущем проекте у меня есть много данных, которые загружаются из файла XML. Эти данные хранятся в одном классе. Это моя «модель», если хотите.

Так что в моем контроллере табличного представления у меня нет массива контроллеров представления (я не хотел, чтобы избыточные данные сохранялись в моем контроллере представления, когда они уже хранятся в другом месте). Вместо этого я получаю доступ к данным из синглтона и создаю контроллер представления, инициализирую его соответствующими данными и затем помещаю их в стек навигации каждый раз, когда выбирается ячейка таблицы.

Это образец таблицы: didselectrowatindexpath: метод:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    DetailViewController *nextController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];

    // Here I setup some data from the singleton (just an example)
    nextController.title = [mySingleton.titles objectAtIndex:[indexPath row]];

    [self.navigationController pushViewController:nextController animated:YES]; 

    [nextController release];
}

Таким образом, мой вопрос заключается в том, может ли этот подход потерять производительность? Я беспокоюсь о выделении и освобождении памяти каждый раз, когда пользователь выбирает ячейку таблицы. С другой стороны, поскольку у меня потенциально может быть много данных, я не хочу повторять эти данные, сохраняя их в массиве контроллеров.

Я всегда мог просто заставить мой синглтон подготовить контроллеры представления и сохранить их вместо просто необработанных данных. Но я нахожу немного странным, что модель всегда неявна в контроллере. Есть ли правильный способ хранения модели независимо от знаний контроллера?

Как бы вы подошли к этой ситуации?

Заранее спасибо.

1 Ответ

1 голос
/ 11 июля 2010

Ваш подход правильный. В этой строке кода:

nextController.title = [mySingleton.titles objectAtIndex:[indexPath row]];

вы не «выделяете и выпускаете» какие-либо данные, кроме данных указателя. nextController.title будет указывать на некоторый элемент внутри mySingleton.titles. Данные живут только внутри класса вашего синглтона, если вы не вызываете метод copy для массивов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...