UITableView: cellForRowAtIndexPath Продолжает вызываться - PullRequest
6 голосов
/ 04 марта 2011

У меня есть контроллер UITableView и UITableView. У меня все настроено с использованием делегатов и т. Д., И оно прекрасно заполняется. Однако я заметил небольшую ошибку следующим методом:

: cellForRowAtIndexPath

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

Должна ли эта функция не вызываться один раз для каждой ячейки, чтобы ее заполнить, а затем выполнить?

Ответы [ 2 ]

8 голосов
/ 04 марта 2011

Неа.Он вызывается каждый раз, когда нужна ячейка, а ячейка нужна каждый раз, когда ее визуализируют.

UITableView - очень умный маленький критерий.Он буквально хранит только отображаемые ячейки, плюс кэш буквально из двух или трех больше.Когда приходит время прокручивать ячейку, которая не была включена, ее можно запросить для ячейки из кэша, а если она есть, она используется повторно.

Таким образом можно отображать ОГРОМНЫЕ наборы данныхв UITableView, потому что на самом деле в памяти нет большого количества ячеек, только те, что на экране, и небольшой кэш.

0 голосов
/ 04 марта 2011

Это правильное поведение.Это связано с выгрузкой UITableViewCells.Вот почему повторное использование клеток важно.Таким образом, в идеале существует ограниченный объем встроенной памяти, который постоянно используется повторно.

Проверьте документы для получения дополнительной информации и примеров кода.

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