![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
опасно делать так
Дальше по уничтожению могут быть обращения к полям. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Teleport |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 557 Регистрация: 5.7.2008 Где: Прибалтика Репутация: 3 Всего: 6 |
хм... спасиб, я попробую твой вариант
|
|||
|
||||
| Akella |
|
||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
ой, немного ошибся, вот так правильнее:
зачем Form1 := nil;? Смотри. В процессе работы пользователь открывает и закрывает окно. При закрытии окна оно не уничтожается, а типа прячется. Там может быть куча компонентов визуальных и невизуальных, вследствие чего окно может жрать кучу памяти. Здесь два пути: 1. Ничего не делать при закрытии формы, тогда она в следующий раз может открыться быстрее, т.к. всё уже создано, просто спрятано и живёт в памяти. 2. Уничтожить, но окно в следующий раз может открываться медленнее. Но память и указатели будут освобождены. , есть код
так вот, если не прописать Form1 := nil, то Assigned вернёт True; Добавлено через 6 минут и 46 секунд По каким полям? Нечего тогда обращаться к несозданной форме или нужно проверять, создана форма или нет. |
||||
|
|||||
| pseud |
|
||||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 10 Всего: 40 |
но ведь мы указали
и никуда оно не спрячется спрячется оно если
Добавлено через 3 минуты и 19 секунд Akella, ты ли это? глянь исходники форм (Forms.pas) и вывод оттуда, если коротко: Form1 := nil; - не нужен. Добавлено через 10 минут и 52 секунды мало того что создано, так еще и инициализировано и имеет следы похождений юзера по ней. P.S.я бы не рекомендовал использовать глобальные переменные создаваемые средой при создании форм, а-ля Form1: TForm1; -------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
||||
|
|||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
pseud, ты не понял, если НЕ указывать в OnClose ничего, то окно не уничтожается
Добавлено через 2 минуты и 33 секунды *пошёл глядеть в зеркало Добавлено через 2 минуты и 48 секунд да вроде я Добавлено через 7 минут и 4 секунды уничтож форму с пом caFree, а потом проверь, что вернёт assigned |
|||
|
||||
| Teleport |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 557 Регистрация: 5.7.2008 Где: Прибалтика Репутация: 3 Всего: 6 |
2 Akella , pseudНу вот, узнал кой-чего нового.
|
|||
|
||||
| pseud |
|
||||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 10 Всего: 40 |
да уж, картинка. я действительно не совсем прав. но и ты до конца не прав тож. объект-форма на самом деле уничтожается, т.е. фраза...
...неверна. а вот ссылка не подчищается. и если после уничтожения я пишу:
получаю AccessViolation. -------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
||||
|
|||||
| VICTAR |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1108 Регистрация: 6.10.2006 Репутация: 37 Всего: 80 |
||||
|
||||
| morpheyushka |
|
|||
![]() Зеленый человек ![]() ![]() Профиль Группа: Участник Сообщений: 563 Регистрация: 26.2.2008 Где: Киев Репутация: 3 Всего: 8 |
Дык мы же это умолчание и изменяем в методе OnClose
Остается только ссылка |
|||
|
||||
| VICTAR |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1108 Регистрация: 6.10.2006 Репутация: 37 Всего: 80 |
Складывается такое впечатление, что здесь каждый говорит о своем
|
|||
|
||||
| Akella |
|
||||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
я ещё раз повторяю, если ты закрываешь немодальную форму, а в OnClose нет Action := caFree , то форма НЕ уничтожается, как донести это до тебя? Добавлено через 2 минуты и 48 секунд
Посмотри Исходники FreeAndNil Добавлено через 4 минуты и 25 секунд Я ГОВОРИЛ ПРО ТО, ЕСЛИ БЫ НЕ БЫЛО В ONCLOSE НИЧЕГО Добавлено через 6 минут и 11 секунд а как до народа донести, что я писАл это:
имея ввиду то, что в OnClose программист не вставил код action := caFree; Добавлено через 8 минут и 56 секунд Теперь идём дальше. Если программист вставляет action := caFree; , то форма уничтожаентся, но указатель НЕТ. но вот если в событии OnClose будет 2 строки: action := caFree; и ИмяФормы := nil; то и форма уничтожится, и указатель в памяти на форму эту освободиться и тогда уже при последующей проверка if assigned(ИмяФормы) вернёт FALSE ЧТО И ТРЕБОВАЛОСЬ ДОКАЗАТЬ! ФУХ |
||||||
|
|||||||
| pseud |
|
|||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 10 Всего: 40 |
+1 прошу прощения за еще немножко оффтопа. Akella, та поставил вопрос: и ответил на него: согласиь вопрос с ответом никак не стыкуются. это меня навело на мысль что ты - это не ты. но ты-то, оказывается, все-таки - ты чур я прекращаю этот комаровский рынок. -------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
OnClose вызывается не святым духом, а изнутри методов формы. После выполнения обработчика в методе вызвавшем обработчик или ниже по стеку могут быть еще обращения к полям самой формы. Потенциально это может привести к AV. Насколько я знаю запрещено удалять объект (себя) из своего же обработчика. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| VICTAR |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1108 Регистрация: 6.10.2006 Репутация: 37 Всего: 80 |
в подтверждение слов http://www.delphilab.ru/content/view/206/63/ |
|||
|
||||
| Akella |
|
||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
но код же сначала уничтожает нормально! форму, а потом только освобождает указатель
так что здесь никаких AV не должно быть Это сообщение отредактировал(а) Akella - 30.7.2008, 20:54 |
||||
|
|||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |