Если у меня есть простой диалог предупреждения, такие какли каждый addEventListener требует removeEventListener, чтобы предотвратить утечку памяти в Appcelerator
var dialog = Ti.UI.createAlertDialog({
cancel: 1,
buttonNames: ['OK'],
message: 'Here is message.',
title: 'Title'
});
dialog.addEventListener('click', function(e){
// do something
});
dialog.show();
dialog = null;
в одном окне. Предположим, я закрываю это окно, и этому экземпляру окна не назначена какая-либо переменная. В окне должно быть собрано мусор. Будет ли «диалог» в конечном итоге освобожден во время сбора мусора или потому, что я никогда не вызываю dialog.removeEventListener, он будет навсегда жить в памяти?
хорошо сказано, я бы добавил еще одну вещь, о которой нужно знать: взгляните на имя функции: addEventListener, это не setEventListener, вызывающий addEventListener несколько раз приведет к обратному вызову события слушатель вызывается несколько раз, он не будет отменять ранее добавленный прослушиватель событий – TheFuquan
(я знаком с ECMAScript и DOM, но новичком от Titanium.) Что такое «много проблем» (утечка памяти в сторону), что можно ожидать, если в этих других случаях не удалить событие _listener_? Почему важно, чтобы прослушиватель событий был функцией * named * (делает ли Titanium сериализацию функций?)? – PointedEars
Помимо утечек памяти вы можете видеть странное поведение в вашем приложении, например, события, запускаемые несколько раз, если эти события обрабатывают некоторый пользовательский интерфейс, он может блокировать поток пользовательского интерфейса. - Названные функции специально предназначены для глобальных пользовательских событий, вы можете иметь анонимные функции для поддерживаемых событий, и они будут удалены, если компонент пользовательского интерфейса больше не используется или не упоминается –