WedX - журнал о программировании и компьютерных науках

Бесплатный компонент FMX в Android / iOS

Существует много дискуссий о том, как бесплатно использовать компонент на мобильном устройстве с помощью Firemonkey, но это не ответ на мой ответ.

В версии 10.4 RAD Studio реализовано унифицированное управление памятью Embarcadero.

Я создаю TFrame с помощью:

FFrame := TMyFrame.Create(nil);
FFrame.OnClickCloseButton := CloseFrame;

В моем методе CloseFrame я делаю:

FFrame.DisposeOf;
FFrame := nil;

На Android все в порядке, но на iOS я получил нарушение прав доступа. Обычно с версией IDE 10.4 я могу сделать:

FFrame.Free;

Но у меня произошел сбой приложения в iOS.

То, что мне нужно сделать, это действительно самые простые вещи. Создайте что-нибудь и освободите это.

Что ты порекомендуешь ? Например, использовать интерфейс с IFrame?


  • Вместо DisposeOf попробуйте Release, если он существует. 25.01.2021
  • С Release я получаю исключение Addresse de l'objet: 0x0, и похоже, что он освобождает объект, но не освобождает графическое пространство. Когда моя рамка открыта внизу, после Release я получаю белый прямоугольник. 25.01.2021
  • Релиз тоже должен работать, если нет, то происходит что-то еще. 25.01.2021
  • Вы не можете освободить/уничтожить любой компонент от любого из его собственных событий. Это справедливо как для компонентов VCL, так и для компонентов FMX. Почему ты не можешь этого сделать? Обычно ваш метод обработчика событий выполняется из кода компонентов, такого как if Assigned(FSomeEvent) then FSomeEvent. Поэтому, как только выполнение вашего метода обработчика событий завершается, код возвращается к коду, вызвавшему ваш метод события. Теперь, поскольку этот код был вызван из экземпляра компонента, который на данный момент больше не существует, потому что вы только что его уничтожили, ваша программа вызовет упомянутое нарушение прав доступа. 25.01.2021
  • Поскольку я использую процедуру объекта, код не выполняется во фрейме, или, может быть, я неправильно понял? 26.01.2021
  • Да, это. Он выполняется синхронно, поэтому он начинается с кадра, и когда этот код будет выполнен, выполнение продолжится в месте вызова - в кадре, как объяснил @SilverWarior. Некоторые платформы более снисходительны к таким сценариям, чем другие, поэтому может показаться, что один и тот же код работает в Windows, а на других платформах он может дать сбой. 26.01.2021
  • @Bosshoss Вы правы. Код внутри вашей процедуры объекта не выполняется в рамках вашего фрейма. Проблема здесь в том, что ваша процедура объекта вызывается/выполняется из процедуры/кода, принадлежащего фрейму. И, как это всегда бывает, когда вы вызываете одну процедуру из другой, как только одна процедура заканчивает свое выполнение, код всегда возвращается к процедуре из того момента, когда была вызвана ваша другая процедура. ... 26.01.2021
  • .. Давайте посмотрим на этот простой пример. У вас есть две процедуры ProcedureA и ProcedureB. Итак, вы выполняете некоторую работу в ProcedureA, а затем звоните в ProcedureB из ProcedureA. Теперь вы будете что-то делать в своем ProcedureB. Но как только работа в ProcedureB завершена, код всегда будет возвращаться обратно к `ProcedureA` на следующую строку после вызова ProcedureB. Даже если вы вызываете ProcedureB из последней строки ProcedureA, код всегда будет возвращаться к ProcedureA после завершения работы в ProcedureB. 26.01.2021
  • Вы можете легко наблюдать это, создав любые две процедуры, вызывая одну из другой и просматривая свой код с помощью F7, чтобы увидеть, как он продвигается. Вы можете пройти через них, используя F8 в случае, если они оба содержат точки останова. С помощью F7 можно перейти к другим процедурам, даже если в них не установлены точки останова. 26.01.2021
  • ПРИМЕЧАНИЕ. Это стандартный способ выполнения кода в Delphi или любом из объектно-ориентированных языков. Все объектно-ориентированные языки имеют эту основную процедуру, с которой начинается код вашего приложения и куда он в конечном итоге всегда возвращается. Некоторые языки четко определяют эту процедуру какMain. Delphi не бит, он все еще там. Где? Прямо в вашем файле проекта. Вы знаете, что begin..end инкапсулирует вызовы Application.Initialize, Application.CreateForm(TForm1: Form1) и Application.Run, которые Delphi по умолчанию вставляет в файл проекта. 26.01.2021

Новые материалы

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

ИИ в аэрокосмической отрасли
Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


Для любых предложений по сайту: [email protected]