#iphone #ios #cocoa-touch #uiview
#iPhone #iOS #cocoa-touch #uiview
Вопрос:
Я видел, что этот вопрос был задан наоборот, ну, мой вопрос в том, если я выпущу UIView, у которого есть superview, вызовет ли [MyView release] последующую очистку с помощью вызова [removeFromSuperview]? Я предполагаю, что это так, потому что я не вижу никаких утечек, но я хочу убедиться.
Ответ №1:
Нет, это не так.
У вас, вероятно, нет утечек, потому что утечка означает указатель без ссылки, и на представление все равно будет ссылаться его родительский элемент. (И когда родительский файл будет выпущен, он избавится от дочерних элементов.)
Комментарии:
1. Я провел небольшой тест, и вы правы, при выпуске они не будут удалены из superview. Спасибо.
Ответ №2:
Вам не нужно вызывать removeFromSuperview, если только вам не нужно, чтобы это представление было удалено из супервизора, пока пользователь все еще смотрит на него. Другими словами, используйте его как инструмент презентации, а не для управления памятью, если только вы не ставите в очередь множество изображений в режиме прокрутки или что-то в этом роде. Помимо этого, супервизии управляют своими подвидами при их выпуске.
Кроме того, если вы остаетесь в контроллере представления и удаляете представление, которое было сохранено, это не освобождает его. Также при выпуске представления в все еще активном контроллере просмотра оно не удаляется из superview (если только вы не выделили для этого подкласс).
Ответ №3:
В справочной документации по классу UIView
addSubview:
Adds a view to the end of the receiver’s list of subviews.
(void)addSubview:(UIView *)view Parameters
view
The view to be added. **This view is retained by the receiver**. After being added, this view appears on top of any other subviews.
Запуск UIView влияет только на количество ссылок. Если количество ссылок равно нулю, оно освобождается. В противном случае предполагается, что он хранится у других пользователей, пока все они его не выпустят.