Производительность UIView: removeFromSuperview VS скрыть

Этот вопрос действительно основной. Какая разница в производительности между удалениемUIView от представления иерархии и скрываяUIView?

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

Дорого ли менять иерархию представлений?

Ответы на вопрос(2)

Решение Вопроса

лучший способ - это скрыть его. ДляUIButton последствия для памяти все же не так велики. И код, конечно, проще, если вы просто переключитеhidden имущество.

Кроме того, вы получаете дополнительное преимущество, чтоhidden свойство анимируемо!

 05 июл. 2012 г., 19:23
Исправьте то, что вы говорите о ссылке. Я думаю, что скрытый метод более эффективен, именно по тем причинам, которые вы указали. Но вам придется создать довольно здоровенный сценарий тестирования, чтобы почувствовать эту разницу. (Например, с большим количеством прокручивающихся ячеек таблицы очень быстро ...)
 bas05 июл. 2012 г., 12:11
Хорошо, если вы сохраните ссылку на представление, его не нужно создавать заново. Я был заинтересован в изменении иерархии представлений. Что вызывает это изменение? Я предполагаю, что это в основном изменяет древовидную структуру, которой управляет UIKit как представление иерархии представления. Как вы думаете, это точно?
 04 июл. 2012 г., 17:50
Да. В случае, если он был удален, вы в основном воссоздаете его с нуля. Это может быть полезно для управления памятью, но может отрицательно сказаться на производительности и менее привлекательно, поскольку вы не можете оживить изменение.
 bas04 июл. 2012 г., 17:19
Так в чем же разница между отображением скрытого UIView и отсутствием этого представления в иерархии представлений? Есть ли разница?

Я провел эксперимент на iOS6 для iPad mini с большим представлением прокрутки, в котором много богатого контента (включая изображения, тени, градиентные слои, фоновые изображения с узорами, вы знаете, эти дизайнеры :)), и я нашел это представление .hidden = YES & # x2260; [удалить removeFromSuperview].

Первоначально я думал, что установка скрытого YES сделает представление не отображаемым / отрисованным, поэтому наличие большого количества скрытых представлений не повлияет на эффективность. Но фактический результат: 1) если я установил скрытые представления за пределами экрана в большом представлении прокрутки (и отобразил их, когда они возвращаются в видимую область), прокрутка не будет плавной / непрерывной вообще. Когда он естественным образом замедляется, он выглядит очень нервным. 2) если я удаляю неэкранные виды из вида прокрутки (но все еще сохраняю в памяти массив отслеживания, поэтому, когда они возвращаются, они могут быть добавлены немедленно), прокрутка, очевидно, более плавная.

 07 мая 2014 г., 12:19
На самом деле это повторяет тот факт, что установка UIView на «скрытый»; сохраняет его от визуализации и, возможно, каким-то образом увеличивает производительность. Конечно, скачок заключается в том, чтобы сделать его «скрытым»; что, возможно, вызывает setNeedsDisplay вместе с setNeedsLayout (не уверен насчет последнего), что будет способствовать замедлению. Для табличного представления это, возможно, плохая идея, но для гораздо большего представления позади. в других представлениях может быть хорошей идеей скрыть его, чтобы он не вызывал перерисовку без необходимости, когда в ней нет необходимости.

Ваш ответ на вопрос