Руководство по actionscript. часть 2, стр. 051
Package { import flash. display.*; import flash. utils.*;
public class ButterflyGame extends Sprite { private var timer:Timer; private var butterfly:Butterfly;
public function ButterflyGame ( ) { // Игровой таймер timer = new Timer(25. 0); timer. start( ); addButterfly( );
}
// Добавляет бабочку в игру public function addButterfly ( ):void { butterfly = new Butterfly(timer);
// Удаляет бабочку из игры public function removeButterfly ( ):void { butterfly = null:
}
}
}
Для добавления бабочки в игру класс ButterflyGame использует следующий код: butterfly = new Butterfly(timer);
Этот код приведет к выполнению конструктора класса Butterfly, в результате чего метод timerListener ( ) класса Butterfly зарегистрируется в объекте gameTimer для получения событий TimerEvent. TIMER.
Когда игрок поймает бабочку, объект ButterflyGame удалит соответствующий объект Butterfly из программы, используя следующий код:
butterfly = null;
Однако, даже несмотря на то, что предыдущий код удаляет ссылку на объект Butte rfly из объекта ButterflyGame, в списке приемников объекта gameTimer продолжает храниться ссылка на метод timerListener ( ) объекта Butterfly и, соответственно, на сам объект Butterfly. Более того, метод timerListener ( ) продолжает выполняться каждый раз при возникновении события TimerEvent. TIMER. Таким образом, объект Butterfly продолжает потреблять память и процессорное время и способен вызвать неожиданные или нежелательные побочные эффекты в программе. Чтобы избежать подобных проблем, перед удалением объекта Butterfly из игры нужно сначала отменить регистрацию метода timerListener ( ) для событий TimerEvent. TIMER.