Показать сообщение отдельно
Старый 08.05.2014, 15:52
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 2  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Логичнее проверять "используется ли изображение сейчас", а не "использовалось ли оно недавно". А вот это уже куда интереснее. Для этой задачи можно использовать слабые ссылки на объекты BitmapData (метод dispose Вам не понадобится, потому что сборщик мусора сам сделает всю работу при таком подходе).
Попробуйте разобраться как работает этот класс:
Код AS3:
package keep.it.secret
{
    import flash.utils.Dictionary;
 
    /**
     * Слабая ссылка на объект.
     *
     * @author is.hiding
     */
    public class WeakReference implements IGCController
    {
        private var _useWeakReference:Boolean;
        private var _store:Dictionary;
        private var _strongReference:Object;
 
        public function WeakReference( object:Object = null, weak:Boolean = true )
        {
            _useWeakReference = weak;
 
            if( object ) this.object = object;
        }
 
        /**
         * Получить или сохранить ссылку на объект.
         */
        public function get object():Object
        {
            if( !_store ) return null;
 
            for( var object:Object in _store )
                return object;
 
            return null;
        }
 
        /**
         * @private
         */
        public function set object( value:Object ):void
        {
            if( !_store ) _store = new Dictionary(true);
 
            this.removeObject();
 
            if( value )
            {
                _store[value] = true;
 
                if( !_useWeakReference ) _strongReference = value;
            }
        }
 
        /**
         * Удалить объект, если он есть.
         */
        private function removeObject():void
        {
            if( _strongReference )
            {
                delete _store[_strongReference];
 
                _strongReference = null;
            }
            else
            {
                if( this.object ) delete _store[this.object];
            }
        }
 
        /**
         * @inherit doc
         */
        public function get useWeakReference():Boolean
        {
            return _useWeakReference;
        }
 
        /**
         * @private
         */
        public function set useWeakReference(value:Boolean):void
        {
            if( _useWeakReference == value ) return;
            // если ссылка переключена на слабую
            if( value ) _strongReference = null;
            else _strongReference = this.object;
 
            _useWeakReference = value;
        }
    }
}
__________________
...вселенская грусть