public class MyButton extends Sprite
{
public function MyButton(defaultHandler:Function)
{
addEventListener(MouseEvent.CLICK, defaultHandler);
}
}
// Основной классAS3: Это может вызвать утечку памяти?
var myButton:MyButton =new MyButton(someFunction);
addChild(myButton)
removeChild(myButton);
myButton = null;
IE Я добавляю функцию обработчика событий анонимного Mouseclick изнутри мой класс Button, когда он построен, и конкретно не удаляя его, когда он удаляется со сцены и изгнан.
Будет ли этот объект иметь право на сборщик мусора, не будет ли это причиной утечки памяти? Или с того, что прослушиватель событий ссылался только на объект, который был удален, будет ли он также удален?
При установке слушателя, как слабые, ответственность за это удаление передается сборщику мусора. Вы никогда не должны доверять GC, так как это в основном случайное, так что это может занять некоторое время. Слабые слушатели - для ленивых разработчиков, которые не берут на себя ответственность за очистку собственного кода. Единственным исключением могут быть исполнители событий на сцене, но вы всегда должны удалять слушателей самостоятельно. –
Согласовано @MarkKnol, и я всегда удаляю их явно.Говоря это, это не то, о чем спрашивает ОП. – sberry
Я нашел это, хотя это немного другой сценарий, но с аналогичной проблемой: http://stackoverflow.com/questions/8471578/would-this-code-cause-memory-leakage , у которого есть цитата : «Слушатели событий не удаляются автоматически из памяти, потому что сборщик мусора не удаляет слушателя **, пока существует объект диспетчеризации ** (если параметр useWeakReference не установлен в true)». - поэтому в соответствии с этим, ЕСЛИ объект, на который ссылаются слушатели **, больше не существует, он не должен ** сохраняться и не должен вызывать утечку - может ли это подтвердить это? –