Знаю, что тема поднималась 100500 раз, сам писал в них, но тем не менее...
После перехода на 10.4 стал замечать, что приложение на мобильных платформах стало частенько зависать или выдавать сообщения External Exception xx. Стал разбираться и заметил, что такое поведение часто происходит после уничтожения объектов или форм. Прогуглив тему динамического удаления объектов нашел информацию вот такого характера
Now, that being said, in RAD Studio 10.4,Embarcadero has removed object ARC handling completely, going back to the traditional memory management model (which they now refer to as "Unified Memory Management"). In which case,TObject.Free()andFreeAndNil()now behave the same as they always have on non-mobile platforms, but now on all platforms equally. So your original code will now work as expected, you do not need to switch toTObject.DisposeOf()in 10.4 onwards (though, you can if you want to, it will behave exactly likeTObject.Free(), and give you the desired effect if you need to support 10.3 and earlier).
То есть, если я правильно понимаю, Эмба отказалась от ARC и вернулась к традиционной модели управления памятью. И теперь нужно обратно вернуться к TObject.Free(), еще компилятор стал ругаться, что метод Release помечен, как deprecated - то есть в скором времени исчезнет. В связи с этим два вопроса
1. Может ли конструкция r.DisposeOff; r:=nill; приводить к зависанию программы? Нужно ли теперь заменить все на r.Free;
2. Как теперь удалить форму, кликнув на кнопку, которая расположена на этой форме?
Вопрос
gonzales
Доброго времени суток!
Знаю, что тема поднималась 100500 раз, сам писал в них, но тем не менее...
После перехода на 10.4 стал замечать, что приложение на мобильных платформах стало частенько зависать или выдавать сообщения External Exception xx. Стал разбираться и заметил, что такое поведение часто происходит после уничтожения объектов или форм. Прогуглив тему динамического удаления объектов нашел информацию вот такого характера
Now, that being said, in RAD Studio 10.4, Embarcadero has removed object ARC handling completely, going back to the traditional memory management model (which they now refer to as "Unified Memory Management"). In which case,
TObject.Free()
andFreeAndNil()
now behave the same as they always have on non-mobile platforms, but now on all platforms equally. So your original code will now work as expected, you do not need to switch toTObject.DisposeOf()
in 10.4 onwards (though, you can if you want to, it will behave exactly likeTObject.Free()
, and give you the desired effect if you need to support 10.3 and earlier).То есть, если я правильно понимаю, Эмба отказалась от ARC и вернулась к традиционной модели управления памятью. И теперь нужно обратно вернуться к TObject.Free(), еще компилятор стал ругаться, что метод Release помечен, как deprecated - то есть в скором времени исчезнет. В связи с этим два вопроса
1. Может ли конструкция r.DisposeOff; r:=nill; приводить к зависанию программы? Нужно ли теперь заменить все на r.Free;
2. Как теперь удалить форму, кликнув на кнопку, которая расположена на этой форме?
procedure TForm30.BlackRectClick(Sender: TObject); begin form1.BlackRect.Visible := false; Form30.Close; //Form30.Free; Form30.Release; end;
Такая конструкция работает, но часто программа зависает
procedure TForm30.BlackRectClick(Sender: TObject); begin form1.BlackRect.Visible := false; Form30.Close; Form30.Free; //Form30.Release; end;
Такая конструкция крашит программу, но это и понятно, удаляем сук, на котором сидим. Но если Release перестанет работать, как тогда удалить форму?
Ссылка на комментарий
8 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.