![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
стервочка (я мужик)
|
s8000_1, мдя ... ни какой ГЦ не имеет отношения ни к какой событийной модели, и уж тем болие к её баблингу. Ваш пример не связывает больше 3х кусочков различных частей приложения, поэтому поймать тут, что-то типа утечки будет сложно... но если вдруг получится так, что Вам придётся передать хотя бы на одного ребёнка Test ссылку, вся ваша конструкция целиком повиснет в памяти после удаления, а не только тот несчастный ребёнок. и так как Денис разрабатывает приложение состоящие не из 2х классов, что-то мне подсказывает, что он не раз встречался с ситуацией, что случайно не убитый слушатель тянет за собой, целую ветку своих родителей, которые в свою очередь тянут за собой своих детей.
|
|
|||||
|
интересное обсуждение.
должен заметить, что в Муке ничего про удаление слушателей как и детей нет. Точнее там просто не затрагивается тема удаления под детей в освобождении памяти. |
|
|||||
|
Регистрация: Jan 2009
Сообщений: 1,651
|
я пишу игрушки. На as3. Там постоянно создаются объекты, удаляются, эти объекты взаимодействуют с другими объектами, держат в себе ссылки на них. И постоянно ловлю утечки памяти. В больших MMO на флеш - и timeZero, и в Dofus, я тоже вижу, как с каждым часом клиент сжирает все больше и больше оперативы. Могу сказать уверенно, что GC во флеше очень неторопливый и совершенно тупой.
Так что в моих проектах зануление не лишнее. И не занимает больше места, чем сами классы, это уж точно. А когда я на заказ делаю какую-нибудь галерею - я даже не заморачиваюсь. |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Цитата:
|
|
|||||
|
Регистрация: Jun 2007
Сообщений: 374
|
Цитата:
По поводу ссылок на ребенка Test - это логично, что вся конструкция повиснет в памяти, т. к. в самом этом ребенке есть ссылка на родителя. Но если делать объекты изолированными (взаимодействие с внешним миром через события и публичные функции самого объекта), то все будет удаляться нормально. Все равно ведь удаление детей и слушателей - перестраховка на случай что-то упустить. iNils, лишние слушатели - это те, которые ловят событие не в target-фазе. А если Вы не добавляете объект на сцену, эти слушатели не создадутся. Последний раз редактировалось s8000_1; 12.03.2009 в 15:10. |
|
|||||
|
стервочка (я мужик)
|
s8000_1, как у Вас всё утопично ... в жизни бы так
![]() |
|
|||||
|
Регистрация: Jun 2007
Сообщений: 374
|
BlooDHounD, но Вы разве не согласны, что ручное удаление - перестраховка или "правило хорошего тона", а не необходимость? И что EventDispatcher можно переписать самому и понять, кто где может создавать ссылки на слушателей и объекты, испускающие события.
Я сам-то лично удаляю слушателей и детей (их по возможности) на случай "вдруг забуду обнулить где-то внешнюю ссылку". |
|
|||||
|
стервочка (я мужик)
|
это необходимость. в команде разработчиков нельзя гарантировать, что второй разработчик соблюдёт все нюансы Вашей безалаберности.
|
|
|||||
|
Регистрация: Jan 2009
Сообщений: 1,651
|
столько разлагольствования, чтобы в итоге выяснить, что в большом проекте все занулять необходимо
|
|
|||||
|
Цитата:
легко проверить тестовым путем, что надо чистить абсолютно все. в идеале каждый класс должен иметь некоторый метод destroy(). и etc прав - в правильно начатом проекте такой проблемы не возникнет, если каждый класс будет иметь свой метод очистки и вся иерархия будет построена так, что при удалении экземпляра класса родителя, удаляются все его детишки. |
![]() |
![]() |
Часовой пояс GMT +4, время: 10:16. |
|
|
« Предыдущая тема | Следующая тема » |
|
|