Axbor Опубликовано 20 июля, 2015 Поделиться Опубликовано 20 июля, 2015 При попытке заново создания фрейма выходит така ошибка "A component named MainMenuFrame already exists." Удалял эту фрейма таким образом: MainMenu->Parent = 0; MainMenu->Free(); MainMenu = 0; Создаю таким образом: MainMenu = new TMainMenuFrame(this); MainMenu->Parent = this; На компьютере работает нормально, но на андроиде вот такая проблема... AgrikBus 1 Ссылка на комментарий
0 kami Опубликовано 20 июля, 2015 Поделиться Опубликовано 20 июля, 2015 вместо всего вышеперечисленного при удалении делать MainMenu.Release; MainMenu:=nil; .Free на мобильных платформах не делает ничего. Ссылка на комментарий
0 xenon54 Опубликовано 20 июля, 2015 Поделиться Опубликовано 20 июля, 2015 Лениво сейчас открывать студию, но по-моему, Free в мобильных платформах заниливает ссылку. Т.е. после строчки "MainMenu->Free();" ссылка будет пустой. Ссылка на комментарий
0 kami Опубликовано 20 июля, 2015 Поделиться Опубликовано 20 июля, 2015 (изменено) xenon54, согласен. Но сам объект от этого никуда не денется - как минимум, его будет держать Parent. Кстати, только сейчас обратил внимание на "compiler translates.....". Весьма удивился, если честно. Я почему-то был уверен, что всё от TObject и выше (дженерики не в счет) реализовано именно кодом в .pas файлах procedure TObject.Free; begin // under ARC, this method isn't actually called since the compiler translates // the call to be a mere nil assignment to the instance variable, which then calls _InstClear {$IFNDEF AUTOREFCOUNT} if Self <> nil then Destroy; {$ENDIF} end; Изменено 20 июля, 2015 пользователем kami Brovin Yaroslav 1 Ссылка на комментарий
0 Axbor Опубликовано 20 июля, 2015 Автор Поделиться Опубликовано 20 июля, 2015 вместо всего вышеперечисленного при удалении делать MainMenu.Release; MainMenu:=nil; .Free на мобильных платформах не делает ничего. Спасибо большое помогло... Ссылка на комментарий
0 xenon54 Опубликовано 20 июля, 2015 Поделиться Опубликовано 20 июля, 2015 xenon54, согласен. Но сам объект от этого никуда не денется - как минимум, его будет держать Parent. Кстати, только сейчас обратил внимание на "compiler translates.....". Весьма удивился, если честно. Я почему-то был уверен, что всё от TObject и выше (дженерики не в счет) реализовано именно кодом в .pas файлах procedure TObject.Free; begin // under ARC, this method isn't actually called since the compiler translates // the call to be a mere nil assignment to the instance variable, which then calls _InstClear {$IFNDEF AUTOREFCOUNT} if Self <> nil then Destroy; {$ENDIF} end; Касательно этого примера, да, фри не сделает того чего от него ожидают Но просто фраза "Free на мобильных платформах не делает ничего." звучит слишком однозначно и может ввести некоторых в заблуждение. Brovin Yaroslav 1 Ссылка на комментарий
0 kami Опубликовано 20 июля, 2015 Поделиться Опубликовано 20 июля, 2015 (изменено) Более того, она и меня ввела в заблуждение Я посмотрел (когда начинал работать с FMX) код Free, увидел, что при ARC он будет пустой и успокоился на этом. А комментарии всякие читать... не барское это дело Вот и попался... Изменено 20 июля, 2015 пользователем kami Brovin Yaroslav 1 Ссылка на комментарий
Вопрос
Axbor
При попытке заново создания фрейма выходит така ошибка "A component named MainMenuFrame already exists."
Удалял эту фрейма таким образом:
Создаю таким образом:
На компьютере работает нормально, но на андроиде вот такая проблема...
Ссылка на комментарий
6 ответов на этот вопрос
Рекомендуемые сообщения