Перейти к содержанию
Fire Monkey от А до Я
  • 0

Освобождение памяти TListViewItem


Tarik02

Вопрос

Рекомендуемые сообщения

  • 0

при Add тебе возвращается указатель(!) на новый итем. 

смотри TListViewItems.AddItem(Index: Integer) в FMX.ListView

 

в TListViewItems.Delete(Index: Integer) вызывается FreeAndNil итема

 

а вот в TListViewItems.Clear просто чистится TList<TListViewItem>.

как известно TList это просто список указателей. так что сама память при ListView.Items.Clear как я понимаю не освободится.

как альтернатива:

 

while ListView.Items.Count > 0 do

ListView.Items.Delete(0); 

Ссылка на комментарий
  • 0
В 10.01.2015 в 13:12, ruslan сказал:

а вот в TListViewItems.Clear просто чистится TList<TListViewItem>. как известно TList это просто список указателей. так что сама память при ListView.Items.Clear как я понимаю не освободится.

Это неверно. Все TListViewItem корректно уничтожаются и освобождаются в Clear.

Чтобы это проверить, достаточно поставить точку останова на TListItem.Destroy;

А предложенный вами код это очень не оптимизированное и медленное решение, с перерассчетом всех индексов при каждом удалении айтема.

Изменено пользователем ENERGY
Ссылка на комментарий
  • 0
  • Модераторы
В 23.09.2018 в 20:43, ENERGY сказал:

Это неверно. Все TListViewItem корректно уничтожаются и освобождаются в Clear.

Чтобы это проверить, достаточно поставить точку останова на TListItem.Destroy;

А предложенный вами код это очень не оптимизированное и медленное решение, с перерассчетом всех индексов при каждом удалении айтема.

В Берлине и ниже метод Clear не чистил за собой и правильно будет чистить циклом как в примере выше

Это справедливо только когда данные в ЛВ перезаполняются

Ссылка на комментарий
  • 0
В 25.09.2018 в 07:27, Равиль Зарипов (ZuBy) сказал:

В Берлине и ниже метод Clear не чистил за собой и правильно будет чистить циклом как в примере выше

Это справедливо только когда данные в ЛВ перезаполняются

Именно в Берлине я и проверял - под Windows и iOS - деструктор вызывается. Под остальными ОС не проверял, но думаю там тоже все ок.

Что значит "перезаполняются"?

@Равиль Зарипов (ZuBy)

Изменено пользователем ENERGY
Ссылка на комментарий
  • 0
  • Модераторы
В 25.09.2018 в 12:52, ENERGY сказал:

Именно в Берлине я и проверял - под Windows и iOS - деструктор вызывается. Под остальными ОС не проверял, но думаю там тоже все ок.

Что значит "перезаполняются"?

@Равиль Зарипов (ZuBy)

Перезаполняется - Контент в ЛВ меняется

Ссылка на комментарий
  • 0

У меня как раз так - на каждый введеный символ TEdit, я делаю Clear и заполняю снова с другими результатами. И деструктор вызывается каждый раз. Возможно в Берлине до обновлений было по другому..

14 минут назад, Равиль Зарипов (ZuBy) сказал:

Перезаполняется - Контент в ЛВ меняется

 

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...