В соседней теме прочитал что если сделать стилизованный итем в котором будут эти лейблы и имейдж, то память при пролистывании будет выгружаться, а для картинок это весьма критично. Правильно ли я это понял? И если это так, то не будет ли тормозить при прокрутке этот листбокс постоянно подгружая и выгружая картинки? И еще вопрос, как правильно потом удалить такой ListBox чтобы освободить память которую скушали объекты внутри стилизованных ListBoxItemo'ов?
При таком создании итемов (как в листинге), как правильно полностью освободить память которую они занимают и удалить объекты? Т.е. я хотел бы чтобы вначале этой процедуры было удаление либо полностью ListBox'a и заного создавать его и заполнять, либо удалить только итемы.
Пробовал разные походы:
Через Release, но тут получается что удаление сработает с некой задержкой, а мне уже сейчас нужно создавать листбокс и заполнять его вполне тяжелыми итемами (из-за картинок) и получается что на момент конца нового заполнения листбокса, старый еще вполне себе может находиться в памяти. Собственно из-за этого частенько возникает "Memory warning". Все бы хорошо, метод работает и память освобождает, но он мне не подходит потому что память нужно очистить сдесь и сейчас.
Пробовал через DisposeOf, через раз при заполнении нового листбокса вылетает "Access...". Каюсь, не очень понимаю работу метода DisposeOf. Как я понял метод помечает объект как Disposed и вроде как вызывается деструктор (когда? через сколько? чего ждет?). Но как я прочитал это плохой метод потому что не освобождает память. В этом у меня есть некоторые сомнения, то ли я не так перевел, то ли ... Если есть кто хорошо понимает, объясните пожалуйста на пальцах суть метода DisposeOf.
Пробовал просто занилить Listbox, но это совсем не помагает, ибо RefCount > 1, и соответственно ничего не происходит.
метод Free просто вызывает деструктор, опять же деструктор удалит те самые label'ы и image'ы из listboxitem'ов? В общем с методом Free тоже не получается, срабатывает "Memory warning" ну и в последующем вылет приложения.
Вопрос
xenon54
Здравствуйте. Создаю Listboxitem'ы так:
var LBItem : TListBoxItem; l1,l2, l3 : TLabel; img : TImage; begin LBItem := TListBoxItem.Create(ListBox1); LBItem.Parent := ListBox1; LBItem.height := 70; LBItem.Tag := i; LBItem.Margins.Left := 5; LBItem.Margins.Right := 5; LBItem.ItemData.Accessory := TListboxitemdata.TAccessory.aDetail; img := TImage.Create(LBItem); img.HitTest := false; img.Parent := LBItem; img.Width := 50; img.Height := 70; img.Bitmap.SetSize(50,50); img.Position.X := 0; img.Position.Y := -1; img.Bitmap.LoadFromFile('......jpg'); l1 := TLabel.Create(LBItem); l1.parent := LBItem; l1.Position.x := 60; l1.Position.y := 0; l1.Width := ListBox1.Width - 120; l1.AutoSize := false; l1.WordWrap := false; l1.StyledSettings := []; l1.Font.Style := [TFontStyle.fsBold]; l1.Font.Size := 18; l1.Height := 20; l1.Text := '...'; l3 := TLabel.Create(LBItem); l3.StyledSettings := []; l3.parent := LBItem; l3.Width := ListBox1.Width - 120; l3.Position.x := 60; l3.Position.y := 24; l3.Font.Size := 12; l3.FontColor := $FF999999; l3.AutoSize := false; l3.WordWrap := false; l3.Height := 20; l3.Text := '...'; l2 := TLabel.Create(LBItem); l2.StyledSettings := []; l2.parent := LBItem; l2.Width := ListBox1.Width - 120; l2.Position.x := 60; l2.Position.y := 44; l2.Font.Size := 12; l2.FontColor := $FF999999; l2.AutoSize := false; l2.WordWrap := false; l2.Height := 20; l2.Text := '...'; end;Пробовал разные походы:
Речь идет про IOS.
1 ответ на этот вопрос
Рекомендуемые сообщения