Просмотр полной версии : Нужно ли и как удалять созданные фильтры?
windrunner31
18.01.2012, 10:29
Создаю фильтр вот так:
_sprite.filters = [new GlowFilter(16711680,50,20,20,3,3)];
Пока что,когда я хочу убрать фильтр я делаю так:
sprite.filters = [];
Правильно ли это?Или все же фильтр - обьект и подлежит удалению как-то по другому?
Если создаете именно таким способом, не создавая переменную класса для хранения ссылки на фильтр, то это нормальное удаление – ссылка, хранящаяся в массиве filters, будет удалена и экземпляр фильтра будет удален GC в надлежащее время. Если же сохранять фильтр в переменную, то достаточно необходимо и ее тоже обнулить, когда фильтр больше не нужен.
Вопрос в тему. Будет ли ошибка?
_sprite.filters = [null, undefined, null]
Выполнится ли фильтр?
_sprite.filters = [null, new BlurFilter(2,2,3), null]
И где можно почитать про воркфлоу фильтров?
Если же сохранять фильтр в переменную, то достаточно ее обнулить, когда фильтр больше не нужен.
Она ведь будет храниться в массиве фильтров. Оттуда тоже нужно будет снести
HardCoder
18.01.2012, 12:27
Она ведь будет храниться в массиве фильтров. Оттуда тоже нужно будет снестиА почему она будет там хранится? Я всегда думал, что:var a:Object = new Object();
var b:Object = {c:a};
trace(b.c); //Object
a = null;
trace(b.c); //null
Ну, индекс элемента в массиве - это такая же ссылка. Приравнивание ссылки на объект к null в одном месте, не уничтожает сам объект. А раз уж ссылка на него есть еще и в массиве, то сборщик мусора его так же не уничтожит.
var array:Array = [];
var sprite:Sprite = new Sprite();
array.push(sprite);
sprite = null;
trace(array[0]); // [object Sprite]
И в твоем случае null там не будет. Только что проверил.
Все будет так:
var a:Object = new Object();
var b:Object = {c:a};
a = null;
trace(b.c)// [object Object]
HardCoder
18.01.2012, 12:41
И в твоем случае null там не будет. Только что проверил.Вот, я нехороший человек! Даже поленился проверить :D. Спасибо за наставление. Совсем забыл про аксиому "нужно удалять все ссылки".
Она ведь будет храниться в массиве фильтров. Оттуда тоже нужно будет снестиКриво выразился, сорри. Подразумевалось естественно, что в случае с переменной обнулить массив недостаточно, надо обнулить и саму переменную. Но согласен, прозвучало так как будто обнулять массив не надо(((( мои извинения.
windrunner31
18.01.2012, 14:52
Спасибо всем!
Создаю фильтр вот так:
_sprite.filters = [new GlowFilter(16711680,50,20,20,3,3)];
Пока что,когда я хочу убрать фильтр я делаю так:
sprite.filters = [];
Правильно ли это?Или все же фильтр - обьект и подлежит удалению как-то по другому?
Можно просто
sprite.filters = null;
Оно и проще и лишний массив не создается.
gloomyBrain
18.01.2012, 17:08
а еще оно выдает неведомые баги отображения. лучше заменять на пустой массив. Если не хочется создавать новый - можно вынуть из старого и присвоить старый (теперь уже пустой) заново.
var fiterArray:Array = myObject.filters;
fiterArray.length = 0;
myObject.filters = fiterArray;
а еще оно выдает неведомые баги отображения
Какие?
Всегда так делаю, но впервые слышу о багах
gloomyBrain
18.01.2012, 18:39
Ну ты и сортировку всегда делал правильно. Баги в 10 плеере наблюдались, не знаю как в 11. Просто не удалялся фильтр, или оставалось что- то фильтрованным, а что-то нет (части отображения). Поэтому всегда присваиваю пустой массив вместо null.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.