Производительность UIView: removeFromSuperview VS hide
Этот вопрос действительно базовый. Какова разница в производительности между удалением UIView
из иерархии представлений и скрытием UIView
?
Я прочитал, что Views, которые не нужны, должны быть удалены из иерархии представлений. В настоящее время я вижу ситуацию, когда a UIButton
должен быть видимым. Когда я скрываю UIButton
и когда я удаляю его из него, смотрю?
Возможно ли изменить иерархию представлений?
Ответы
Ответ 1
Если вам нужно чередовать показ и скрытие подвью, лучший подход, безусловно, скрывает его. В случае UIButton
последствия памяти не так велики. И код, безусловно, проще, если вы просто переключите свойство hidden
.
Кроме того, вы получаете дополнительное преимущество в том, что свойство hidden
является анимированным!
Ответ 2
Я провел эксперимент на iOS6 iPad mini с большим представлением прокрутки с большим количеством контента (включая изображения, тени, слои градиента, узорные фоновые изображения, вы знаете, эти дизайнеры:)) и я что view.hidden = YES ≠ [view removeFromSuperview].
Первоначально я думал, что настройка, скрытая в YES, сделает представление не рендерингом/рисованием, поэтому наличие большого количества скрытых представлений не повлияет на эффективность. Но фактический результат:
1) если я устанавливаю внеэкранные виды в большом прокрутке, чтобы скрывать (и показывать их, когда они возвращаются в видимую область), прокрутка не является гладкой/непрерывной вообще. Когда он естественно замедляется, он выглядит очень нервным.
2) если я удаляю внеэкранные представления из вида прокрутки (но все равно сохраняю в памяти массив отслеживания, поэтому, когда они возвращаются, они могут быть добавлены сразу), прокрутка, очевидно, более плавная.