Насколько я понимаю, основным преимуществом удаления повторно используемых ячеек в UITableViewControllers является сохранение памяти за счет хранения только видимых ячеек и их содержимого в памяти.Правильное использование UITableViewCells с пользовательскими высотами
Тем не менее, это, кажется, имеет смысл создать содержимое ячейки каждый раз, когда клетка запрашиваемую в cellForRowAtIndexPath (соответственно GetCell() в MonoTouch) и освободить всю клетку, когда не используется/видимой больше.
Это работает, если все ячейки имеют одинаковую высоту. Но если только одна ячейка имеет другую динамическую высоту, которая вычисляется путем создания представления содержимого, высота должна быть установлена в пределах heightForRowAtIndexPath (соответственно GetHeightForRow() в MonoTouch).
Теперь я смущен, потому что heightForRowAtIndexPath, как представляется, вызывается для всех ячеек в таблице, даже ячеек, которые в настоящее время не отображаются в окне просмотра.
в следующем журнале (первое число является индексом раздела, второй индекс строки):
2013-12-12 13:00:29.322 MyApp[32603:80b] GetHeightForRow - 1 - 0
2013-12-12 13:00:29.323 MyApp[32603:80b] GetHeightForRow - 1 - 1
2013-12-12 13:00:29.323 MyApp[32603:80b] GetHeightForRow - 1 - 2
2013-12-12 13:00:29.323 MyApp[32603:80b] GetHeightForRow - 1 - 3
2013-12-12 13:00:29.324 MyApp[32603:80b] GetHeightForRow - 1 - 4
2013-12-12 13:00:29.324 MyApp[32603:80b] GetHeightForRow - 1 - 5
2013-12-12 13:00:29.325 MyApp[32603:80b] GetHeightForRow - 1 - 6
2013-12-12 13:00:29.325 MyApp[32603:80b] GetHeightForRow - 1 - 7
2013-12-12 13:00:29.326 MyApp[32603:80b] GetHeightForRow - 1 - 8
2013-12-12 13:00:29.326 MyApp[32603:80b] GetHeightForRow - 1 - 9
2013-12-12 13:00:29.326 MyApp[32603:80b] GetHeightForRow - 1 - 10
2013-12-12 13:00:29.327 MyApp[32603:80b] GetHeightForRow - 1 - 11
2013-12-12 13:00:29.327 MyApp[32603:80b] GetHeightForRow - 1 - 12
2013-12-12 13:00:29.328 MyApp[32603:80b] GetHeightForRow - 1 - 13
2013-12-12 13:00:29.328 MyApp[32603:80b] GetHeightForRow - 1 - 14
2013-12-12 13:00:29.329 MyApp[32603:80b] GetHeightForRow - 1 - 15
2013-12-12 13:00:29.329 MyApp[32603:80b] GetHeightForRow - 1 - 16
2013-12-12 13:00:29.330 MyApp[32603:80b] GetHeightForRow - 1 - 17
2013-12-12 13:00:29.330 MyApp[32603:80b] GetHeightForRow - 1 - 18
2013-12-12 13:00:29.330 MyApp[32603:80b] GetHeightForRow - 1 - 19
2013-12-12 13:00:29.331 MyApp[32603:80b] GetHeightForRow - 1 - 20
2013-12-12 13:00:29.331 MyApp[32603:80b] GetHeightForRow - 1 - 21
2013-12-12 13:00:29.331 MyApp[32603:80b] GetHeightForRow - 1 - 22
2013-12-12 13:00:29.332 MyApp[32603:80b] GetHeightForRow - 1 - 23
2013-12-12 13:00:29.332 MyApp[32603:80b] GetHeightForRow - 1 - 24
2013-12-12 13:00:29.332 MyApp[32603:80b] GetHeightForRow - 0 - 0
2013-12-12 13:00:29.333 MyApp[32603:80b] GetHeightForRow - 0 - 1
2013-12-12 13:00:29.335 MyApp[32603:80b] GetCell - 0 - 0
2013-12-12 13:00:29.344 MyApp[32603:80b] GetCell - 0 - 1
2013-12-12 13:00:29.347 MyApp[32603:80b] GetCell - 1 - 0
2013-12-12 13:00:29.349 MyApp[32603:80b] GetCell - 1 - 1
2013-12-12 13:00:29.351 MyApp[32603:80b] GetCell - 1 - 2
2013-12-12 13:00:29.354 MyApp[32603:80b] GetCell - 1 - 3
2013-12-12 13:00:29.356 MyApp[32603:80b] GetCell - 1 - 4
2013-12-12 13:00:29.358 MyApp[32603:80b] GetCell - 1 - 5
2013-12-12 13:00:29.361 MyApp[32603:80b] GetCell - 1 - 6
2013-12-12 13:00:29.363 MyApp[32603:80b] GetCell - 1 - 7
Есть ли способ, чтобы не создавать все представления контента перед визуализацией таблицу, то я просто не видите? Или мое основное предположение неверно, что это лучший способ, чтобы производительность не создавала все представления контента раньше?
Благодаря
Я бы предложил предварительное вычисление высот ячеек и сохранение их в массиве. – duci9y
Если бы я сделал это, мне пришлось бы создавать все представления контента перед отображением таблицы, поэтому ожидаемая производительность adavantage исчезнет. –
Не обязательно. Если это текст, вы можете очень легко и эффективно рассчитать размеры. – duci9y