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

switcher! 23.11.2009 03:35

formyka, вы на дату последнего сообщения смотрели?
Уж если вы хотели помочь, то зря удалили комменты Колина Мука в его GarbageCollectionDemo. С ними новичку понятнее. :)

formyka 23.11.2009 13:29

Я для будущих поколений писал! Для тех, кто воспользуется поиском как и я сам... По моему опыту новички-чайники вообще не задумываются об удалении мусора, поэтому могут даже и не понять контекста вопроса (им и так нужно читать книгу, так как в рамках ответов на форуме - сложно понять все нюансы). А те, кто кто знает основы ООП, принципы работы сборщика мусора и что такое счетчик ссылок, я думаю, поймут идею и без коментов. Ну вобщем, если кто-то так ничего и не понял, качаем книжку Мука и читаем!

Colin Moock - Essential ActionScript 3.0 (June 2007)

formyka 28.11.2009 00:06

Кстати, вот хороший вопрос:

Возмем тот же самый пример из книжки Мука и модифицируем его таким образом:

Код AS3:

package {
  import flash.display.*;
  import flash.text.*;
  import flash.utils.*;
  import flash.events.*;
  import flash.system.*;
  public class GarbageCollectionDemo extends Sprite {
 
    public function GarbageCollectionDemo() {
 
      var s:Sprite = new Sprite();
      s.addEventListener(Event.ENTER_FRAME, enterFrameListener);
 
      var timer:Timer = new Timer(100, 0);
      timer.addEventListener(TimerEvent.TIMER, timerListener);
      timer.start();
      }
 
    private function timerListener (e:TimerEvent):void {
      for (var i = 0; i < 1000; i++) new TextField();
      trace("TIMER: System memory used by this program: " + System.totalMemory);
      }
 
    private function enterFrameListener (e:Event):void {
      trace("SPRITE: System memory used by this program: " + System.totalMemory);
      }
    }
  }

Получаем вот такой результат:

Код:

SPRITE: System memory used by this program: 12341248
SPRITE: System memory used by this program: 12349440
SPRITE: System memory used by this program: 12349440
SPRITE: System memory used by this program: 12349440
TIMER: System memory used by this program: 14172160
SPRITE: System memory used by this program: 14172160
SPRITE: System memory used by this program: 14172160
SPRITE: System memory used by this program: 14172160
TIMER: System memory used by this program: 15986688
SPRITE: System memory used by this program: 15986688
SPRITE: System memory used by this program: 15986688
SPRITE: System memory used by this program: 15986688
SPRITE: System memory used by this program: 15986688
TIMER: System memory used by this program: 14184448
TIMER: System memory used by this program: 15982592
TIMER: System memory used by this program: 17788928
TIMER: System memory used by this program: 19587072
TIMER: System memory used by this program: 13393920
TIMER: System memory used by this program: 15187968

Как видим - спрайт со временем "умирает", а таймер "живет"! Как вы думаете, почему так происходит? Ведь с точки зрения области видимости и специфики работы сборщика мусора, на первый взгляд, оба объекта равноправны.


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

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