PDA

Просмотр полной версии : Обращение к объекту, созданному через конструктор класса


marat_sa
22.01.2008, 14:41
Здравствуйте! Есть класс InfoWindow, он создает мувиклип в конструкторе класса, т.е. для создания экземпляра класса, надо:
var alrtWnd:InfoWindow = new InfoWindow(parameters, ...);
По сути мы можем создать его (вызвать) в методе какого-либо класса, после чего, его локальные переменные уничтожаются, включая и наш alrtWnd. Ссылка на него потеряется.
Как реализовать уничтожение конкретного экземпляра такого класса?

Вот как выглядит метод closeWindow() класса InfoWindow

public function closeWindow():Void {
mcWindow.removeMovieClip();
delete this;
}

mcWindow как мувик уничтожается (исчезает), а вот delete this не отрабатывает. Почему?

iNils
22.01.2008, 14:45
Объект не может удалить сам себя.

marat_sa
22.01.2008, 14:53
А как тогда быть?
У меня нет ссылки на созданный объект.
Можно
alrtWnd.closeWindow();
Потом
delete alrtWnd;
Но мы же потеряли ссылку на alrtWnd, после выполнения локального метода, откуда и создавался экземпляр.

iNils
22.01.2008, 14:59
closeWindow удалит лишь мувиклип, а мувиклип не является экземляром InfoWindow.

etc
22.01.2008, 15:02
А что мешает создавать окно без ссылки?

marat_sa
22.01.2008, 15:16
Просто
new InfoWindow(parameters,...);
Eclipse отторгает (MTASC). А как к нему потом обратиться?

etc
22.01.2008, 18:12
А зачем вам к нему обращаться?

wvxvw
22.01.2008, 18:54
Я в таких случаях делаю менеджеры. Т.е. класс с набором статических методов, который и следит за тем, какое окно сейчас открыто, какое его открыло, какое нужно активировать когда текущее закроется и т.п. Т.е. в случае с алертом принцип действий был бы приблизительно такой: какой-то класс порывается создать алерт --> обращается к менеджеру --> менеджер исходя из своих соображений открывает/закрывает/активирует чего нужно --> создает и регистрирует окно. Дальше, когда окно захочет закрыться, оно опять же обратится к менеджеру, который позаботится о том, чтобы нужное окно было удалено/получило фокус и т.д.