Цитата:
|
Имею сомнения в правильности понимания этой фразы. Как список отображения можно реально добавить на стэйдж?
|
Да, тут есть некоторая путаница. Список отображения на самом деле не один, он есть у каждого экземпляра DisplayObjectContainer (т.е. Sprite, Loader, Stage, MovieClip). С помощью addChild() Вы добавляете объект в список отображения контейнера. Но на экране он естественно появится только в том случае, если вся цепочка будет в списке отображения стейджа, то есть области отображения плеера. Мейн, конечно, добавляется на стейдж автоматически (и конечно, мало кто додумается его удалить со стейджа зачем-то), однако это не значит что все контейнеры всегда добавлены в список отображения Мейна. Это как раз в наших руках.
Снова не так.
Публичные свойства и методы (говорят еще "члены класса") экземпляра видны всем экземплярам, имеющим ссылку на данный экземпляр. Например, в классе А создается экземпляр класса В. На него есть ссылка, и его публичные члены доступны через
экземплярВ.метод(). Вобщем, везде где Вы можете написать
экземплярВ, Вы можете и вызвать его
метод() или обратиться к public свойству. А к private не можете. А к internal можете только если классы А и В лежат в одном пакете, это public "для своих".
Цитата:
|
Я кстати даже не в курсе, является ли тема наследования универсальной и независимой от языка программирования
|
Нюансы конечно есть, но в целом законы одни. В AS3 нет абстрактных классов, как во многих других ЯП, соответственно нет виртуальных функций и прочего, связанного с темой. Кроме того, понятия Класса и его роли не во всех языках схожи. Но в целом в плане наследования нет никаких противоречивых концепций, все в духе ООП.
Цитата:
|
Я понял так: removeListener нужен только когда мы удаляем this-экземпляр. Но если даже мы не внедрили этот метод, то GC удалит слушатель сам
|
Нет, не удалит. Вы не можете вообще "удалить" никакой экземпляр. Это может только GC. Вы можете только "забыть" экземпляр, то есть удалить все ссылки на него. Если на экземпляр нет ни одной ссылки, значит все о нем забыли и никто не сможет к нему обратиться. Только в этом случае GC может его удалить из памяти насовсем, как никому не нужный. Но если Вы отдали кому-то ссылку на него в виде ссылки на его метод-handler, то его "помнят" и он кому-то "нужен". Вы можете обнулить все переменные, в которых хранились ссылки на этот экземпляр, но источники событий, в которые он передал ссылки на свои методы-хэндлеры, будут его помнить, и это не позволит GC удалить этот экземпляр. Он должен сначала отписаться от всех событий, которые слушает. Поэтому removeEventListener() конечно же важен, только не надо путать, чей именно.