Ограничение памяти на количество элементов в табличном представлении - PullRequest
1 голос
/ 30 ноября 2011

Есть ли проблема с памятью относительно количества элементов в списке, которые я показываю в моем табличном представлении?Если пользователь продолжает добавлять элементы, произойдет ли сбой приложения или что-то из-за проблем с памятью?

Ответы [ 2 ]

1 голос
/ 30 ноября 2011

Чтобы ответить на ваши вопросы:

  1. Нет черно-белого ответа на это. Чтобы попытаться объяснить, представьте себе UITableView как нечто вроде визуального массива данных. Фактически, большинство людей (включая меня) используют объект данных источника, такой как NSArray или NSDictionary, чтобы предоставить данные отображения для UITableView. Все ограничения памяти, которые будут применяться к этим объектам (массивам и словарям), применяются к вашему UITableView, при условии, что ваш UITableView настроен правильно, и вы используете рекомендованные методы для повторного использования ячеек. Это сводится к следующему: возможно ли иметь очень большой UITableView? - Да. Как долго, хотя, это я не знаю. Я создал UITableViews со сложными подклассами ячеек и 200 строк, и они работали нормально. Это зависит от того, как вы настроили таблицу и от источника данных, который вы используете. Помните еще раз, что ограничение связано с источником данных. Имейте чрезвычайно большой массив, и в конечном счете ваше устройство выдаст предупреждение памяти. В качестве лучшей практики используйте нумерацию страниц. В Интернете есть множество учебников, чтобы включить подкачку на UITableViews. Ленивый загружать ваши изображения (если таковые имеются), если они загружаются.

  2. Да, вы можете. Вы можете сделать много удивительных вещей, если вы достаточно креативны, когда создаете подклассы UITableViewCells. В противном случае вы также можете использовать стандартный UITableViewCell. Там есть две метки: textLabel и detailTextLabel. Используйте эти два для отображения данных, которые вы хотите.

  3. Ваш UITableViewDelegate имеет метод didSelectRowAtIndexPath, который вы можете реализовать. Пока ваш контроллер представления, содержащий UITableView, является его делегатом, он будет отвечать на didSelectRowAtIndexPath.

  4. Просто очистите массив, который вы используете в качестве источника данных (имейте в виду, что ваш метод источника данных numberOfRowsInSection ДОЛЖЕН использовать счетчик массивов) и вызовите reloadData для UITableView

РЕДАКТИРОВАТЬ: вопрос был отредактирован, поэтому к вопросу применим только пункт 1 из вышеуказанных 4 пунктов :) Остальные приятно знать, хотя

0 голосов
/ 30 ноября 2011

Ничего специфичного для таблицы, но да, у вас кончится.

Самое важное, вероятно, использовать dequeueReusableCellWithIdentifier: в вашем tableView:cellForRowAtIndexPath: методе делегата. Это в основном сокращает использование памяти до количества видимых ячеек (плюс одна прокручивается в поле зрения).

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