Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Отписывание от событий (http://www.flasher.ru/forum/showthread.php?t=174650)

TanaTiX 30.01.2012 14:47

Цитата:

А вешаться на события на мягких ссылках не стоит по одной причине:
- все время, пока GС будет добираться до объекта - объект будет исправно обрабатывать события - грузить проц тобишь.
Откуда такая информация? Мягкие ссылки - одна из рекомендаций адоба.

s3dworld 30.01.2012 14:48

Ребят, всем спасибо за ответы. У меня вопрос по стилю ведения проекта (чтобы новой темы не создавать). Я как-то от C++ приучился. Вот главным классом у меня всегда является main.as, он не лежит ни в каком пространстве имён. Далее я решил создать пакет Game и в него впихнуть класс Game. Получилось вот так:

Код:

Game/Game.as
main.as

Но при создании объекта Game в классе main приходится писать так:

Код AS3:

var game:Game=new Game.Game();

Работаю в FlashDevelop и тут каждая папка как пакет получается. Может стоит писать так:

Код:

Game/...
Game.as
main.as

Или это тоже какие-то подводные камни несёт? А то у меня сложилось такое впечатление, что лучше не называть пакеты такими же названиями как имена классов. Так ли это?

TanaTiX 30.01.2012 14:50

s3dworld
Цитата:

чтобы новой темы не создавать
На форуме правило - один вопрос, одна тема.

s3dworld 30.01.2012 14:52

Извиняюсь, создаю новую тему...

HardCoder 30.01.2012 14:59

Цитата:

Сообщение от TanaTiX (Сообщение 1059997)
Откуда такая информация? Мягкие ссылки - одна из рекомендаций адоба.

Думаю, имеется в виду что GC не сразу удалит слушатель в виду соображений что памяти достаточно. Вот слушатель и будет сидеть в памяти, не влияя на нее. А вот на проц будет грузить, потому что слушатель будет все время выполняться, пока GC не увидит что памяти мало и не удалит его.

TanaTiX 30.01.2012 15:00

Мягкие ссылки не отменяют отписывание от событий.

HardCoder 30.01.2012 15:05

Согласен. Лично я не всегда доверяю мягким ссылкам и отписываюсь от событий в явном виде. А что - перестраховаться не помешает. Это вырабатывает привычку, чтобы потом не искать утечки.

expl 30.01.2012 15:38

Цитата:

Цитата:
А вешаться на события на мягких ссылках не стоит по одной причине:
- все время, пока GС будет добираться до объекта - объект будет исправно обрабатывать события - грузить проц тобишь.

Откуда такая информация? Мягкие ссылки - одна из рекомендаций адоба.
Это не информация - это чистая логика: "Отписываться лучше, чем не отписываться с мягкими ссылками".

Да, с мягкими оно надежнее - вдруг не отпишешься - хотя бы GC пусть и через некоторое время, но снесёт.

Однако это напоминает выдачу парашютов пилотам пассажирского лайнера - а чё? - на пару жертв меньше зато будет.
Ведь если вы забыли отписаться и ссылка была _не_ мягкой - это обнаружить будет проще, чем если бы ссылка была мягкой. Подход спорный, на абсолютную истинность не претендую.

А слушать или не слушать Adobe - это зависит от Вашего подхода к управлению памятью в приложении в целом.

crazyone 30.01.2012 15:49

Цитата:

Код AS3:

public function main()
                {
                        if(stage)
                        {
                                Start();
                        }
                        else
                        {
                                isAddedToStageListener=true;
                                addEventListener(Event.ADDED_TO_STAGE,OnAddedToStage);
                        }
                }


Неизвестно, откуда это пошло, но это условие абсолютно лишнее.
Да, в конструкторе класса приложения переменная stage доступна, но ADDED_TO_STAGE сработает в любом случае после конструктора, поэтому достаточно написать так:

Код AS3:

package 
{
        import flash.display.MovieClip;
        import flash.events.Event;
 
        public class main extends MovieClip
        {
                public function main()
                {
                        addEventListener(Event.ADDED_TO_STAGE,OnAddedToStage);
                }
 
                private function OnAddedToStage(_event:Event):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE,OnAddedToStage);
                        Start();
                }
 
                private function Start():void
                {
 
                }
        }
 }


TanaTiX 30.01.2012 15:52

Цитата:

Отписываться лучше, чем не отписываться с мягкими ссылками
Повторюсь
Цитата:

Мягкие ссылки не отменяют отписывание от событий.
Я всегда (где это возможно) использую мягкие ссылки И отписываюсь от событий.
Цитата:

А слушать или не слушать Adobe - это зависит от Вашего подхода к управлению памятью в приложении в целом.
Да, к рекомендациям адоба можно (а порой и нужно) относиться критично, но ИМХО не в данном случае.
Цитата:

Ведь если вы забыли отписаться и ссылка была _не_ мягкой - это обнаружить будет проще, чем если бы ссылка была мягкой.
А если не отписался и ссылка не мягкая когда и на каком этапе обнаружишь ошибку?


Часовой пояс GMT +4, время: 03:16.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.