Производительность 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) если я удаляю внеэкранные представления из вида прокрутки (но все равно сохраняю в памяти массив отслеживания, поэтому, когда они возвращаются, они могут быть добавлены сразу), прокрутка, очевидно, более плавная.