Перейти к содержанию
  • Регистрация
  • 0
Tarik02

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

Вопрос

Нужно ли освобождать память после создания ячеек в TListViewItem. Вот код создания:

TListViewItem *Item = ListView1->Items->Add();
Item->Text = "123";

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

  • 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 эмодзи.

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

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

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


  • Похожий контент

    • От Виталий Иванов
      Вопрос к экспертам
      Возникла необходимость и хотел спросить можно ли как-то сделать TlistViewItem  прозрачным, а то получается что сам TlistView может быть прозрачным а его итем нет . Это как-то же делаться у TListBoxItem. 
      Заранее огромное спасибо.
    • От AndroidHalfNoob
      Что то не могу догнать: загрузил в ImageList 2 картинки, а вот в ListView не получается их засунуть.
      var  LItem: TListViewItem;

      если прописываю прямой путь к файлу на компе, то все работает
       


    • От Tarik02
      Я создаю TListViewItem и добавляю её в TListView, но как добавить картинку слева? Вот код создания ячейки:
      TListViewItem *Item = ListView1->Items->Add(); Item->Text = "123";
    • От Kitty
      Приложение создается для платформы Андроид.
      Из INI файла читается время и помещается в список. Рисунок прилагается. Для размещения этого времени справа в списке я использую стандартный пример, который идет в Samples студии:
      const System::UnicodeString sText = L"CA"; void __fastcall TForm1::ListView1UpdatingObjects(const TObject *Sender, const TListViewItem *AItem, bool &AHandled) { TListItemText * LCaption = reinterpret_cast<TListItemText*>((const_cast<TListViewItem*>(AItem))->Objects->FindObject(sText)); if (LCaption == NULL) { LCaption = new TListItemText((TListItem*)AItem); LCaption->Name = sText; LCaption->Align = TListItemAlign::Trailing; LCaption->VertAlign = TListItemAlign::Trailing; LCaption->PlaceOffset->X = 15; LCaption->PlaceOffset->Y = 12; LCaption->TextAlign = TTextAlign::Center; LCaption->Trimming = TTextTrimming::Character; LCaption->IsDetailText = True; LCaption->Width = 90; LCaption->Height = 45; } } //в другом месте программы цикл и в нем фрагмент заполнения: TListViewItem * item = ListView1->Items->Add(); //********************* //в (*It).first например значение: 08:00:00 item->Data[sText] = TValue::From<UnicodeString>((*It).first); Подскажите, пожалуйста, как вместо простого текста в этих местах размещать программно компонент TTimeEdit чтобы читать в него значения, и иметь возможность править эти значения времени прямо в ListView?
      Спасибо.

    • От ovk
      Прошу помощи,как вывести иконки в ListView которые хранятся в StyleBook ?
      у меня есть база,в ней хранятся ID иконок, которые нужно выводить,в StyleBook лежат иконки, может у кого есть подобный опыт?!
    • От Aptem
      Здравствуйте.
       
      Можно ли у TListViewItem при добавлении его в TListView установить свойство Accessory в None?
       
      По-умолчанию, можно установить только More, Checkmark или Detail.
       
      У компонента TListView реализован механизм Swipe-to-Delete и это очень удобно при работе со списками. Но вот дополнительный контрол справа совсем не нужен. У TListBox можно поставить None, но у него нет Swipe-to-Delete.
       
      Спасибо.
    • От antarey
      Аналогично теме интересует как обработать нажатие на картинке TListViewItem.Bitmap и поменять для конкретного итема
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

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