Delphi. Firemonkey(FMX). Чистим память и закрываем формы.



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

Очистка памяти в firemonkey отличается от той же VCL, поэтому я приведу немного теории и кода по удалению объектов(на которые выделяется память) и закрытию форм(close и free в мобильных приложениях только прячут форму).

Очистка памяти выделенной под объекты

Начнем с того, что на самых известных мобильных платформах Андроид и iOS все объекты получили новое поле - счетчик ссылок(RefCount). Если счетчик станет равным нулю, то объект автоматически удалится. При ссылке на объект счетчик увеличивается на единицу. Название этого механизма - ARC (Automatic Reference Counting).

Используем два метода очистки памяти - DisposeOf и Free.

c[r].DisposeOf;//объект удаляется из списка, все ресурсы используемые им будут распущены, но память выделенная под объект еще не очищена.
c[r]:=nil;// Удаляем ссылки на объект, ем самым очищая память


c[r].Parent:=nil;//убираем объект из структуры объектов, удаляя его из родительского контрола Parent=nill
c[r].Free;//вызываем free
c[r] := nil; // обнуляем счетчик на объект из массива()


Примечание: в Delphi XE6 скорее всего будет достаточно одного вызова Free, дальше все будет сделано автоматически.


Закрытие формы в мобильных приложениях

Методы close и free не закрывают форму а только прячут ее. Чтобы закрыть форму и очистит память, выделенную под нее, нужно повешать дополнительный обработчик на закрытие формы onClose:

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := TCloseAction.caFree;
end;


Вот вроде бы и все, удачи!
Теги:
Firemonkey, FMX
Добавлено: 23 Февраля 2015 17:09:02 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...