Показать сообщение отдельно
Старый 18.10.2013, 12:45
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 11  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

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