Форум 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=127055)

twix1124 03.07.2009 20:07

как полностью удалить экземпляр?
 
Т.е. что б после удаления кучи объектов флешка не лагала...
Достаточно ли удалить все его листенеры и сам экземпляр путём parent.removeChild?

Psycho Tiger 03.07.2009 21:05

Да. И все внешние ссылки на него.

iflamberg 03.07.2009 21:11

и еще занулить на него ссылки
upd:
упс. чета спатки мне пора =/

twix1124 03.07.2009 23:26

Цитата:

Сообщение от Psycho Tiger (Сообщение 833013)
Да. И все внешние ссылки на него.

Цитата:

Сообщение от iflamberg (Сообщение 833015)
и еще занулить на него ссылки
upd:
упс. чета спатки мне пора =/

Это одно и то же? Т.е. null присвоить?

Psycho Tiger 03.07.2009 23:36

Угадал.

incvizitor 06.07.2009 03:06

У меня схожая проблема Объекты отлично удалялись но вот написал

Код AS3:

setTimeout(hideField,1000,field);

и ничего не удаляется. Думале таймаут как и листенер надо удалить. Сделал так.

Код AS3:

var t=setTimeout(hideField,1000,field,t);
 
private function hideField(f,t)
{
        clearTimeout(t);
        t=null;
 
        ....
 
}

Без результата :(

BlooDHounD 06.07.2009 10:25

Код:

var t=setTimeout(hideField,1000,field,t);
Вас не смущает,что Вы передаётся аргументом переменную, которая обретёт своё значение только после выполнения это функции, и поэтому она всегда равна undefined.

incvizitor 06.07.2009 21:15

Так как же "очистить" таймаут?

BlooDHounD 06.07.2009 23:56

например так:
Код AS3:

private var _t:uint;
 
...
 
this._t = setTimeout(hideField,1000,field);
 
...
 
private function hideField(f) {
        clearTimeout( this._t );
        this._t = 0;
 
        ....
 
}


incvizitor 07.07.2009 00:28

Ну там походу массив нужен в таком случае... Я потому и передавал параметром. В принципе можно и так:

Код AS3:

var timeout_arr:Array=[];
....
timeout_arr.push(setTimeout(hideField,1000,field,timeout_arr.length);
 
private function hideField(f,i) {
        clearTimeout(timeout_arr[i]);
        timeout_arr[i] = 0;
 
        ....
}

Без этого точно нельзя. Не то что бы лень, но если есть более быстрый метод, был бы рад узнать его. И почему вместо "null" вы присваеваите "_t" пераменной "0".

expl 07.07.2009 00:56

Цитата:

И почему вместо "null" вы присваеваите "_t" пераменной "0".
Потому что uint null не принимает, она даже без инициализации 0 равна

Вобще _t=0 совершенно ничего не дает - как 4 байта были заняты, так и остались.

BlooDHounD 07.07.2009 00:58

Код AS3:

package {
 
        import flash.utils.setTimeout;
 
        public function mySetTimeout(closure:Function, delay:Number, ...paramets):uint {
                var to:Timeout = new Timeout( closure, paramets );
                to.id = setTimeout( to.call, delay );
                return to.id;
        }
 
}
 
import flash.utils.clearTimeout;
 
internal final class Timeout {
 
        public function Timeout(closure:Function, args:Array=null) {
                super();
                this.closure= closure;
                this.args = args;
        }
 
        public var id:uint;
 
        public var closure:Function;
 
        public var args:Array;
 
        public function call():void {
                clearTimeout( this.id );
                this.closure.apply( null, this.args );
        }
 
}

Добавлено через 1 минуту
expl, зато я смогу определять есть ли такой таймаут по значению 0.

incvizitor 07.07.2009 01:43

Отлично, благодорю.


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

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