лучшие практики сбора мусора - PullRequest
3 голосов
/ 22 февраля 2010

Если вы удаляете MovieClip из списка отображения, и этот MovieClip, в свою очередь, имеет дочерние MovieClips, у которых есть свои собственные прослушиватели событий, необходимо ли удалять ВСЕХ прослушивателей из дочерних MovieClips?

или только родительский MovieClip, который непосредственно удаляется из списка отображения?

Ответы [ 2 ]

3 голосов
/ 22 февраля 2010

Зависит от того, имеют ли слушатели, прикрепленные к родительскому или дочернему мувиклипу, слабые ссылки, указывающие на это или нет.

Когда вы добавляете слушателя, вы можете использовать последний параметр, чтобы установить, будет ли слушатель использовать слабую ссылку. Это именно то, что вам нужно знать для вопроса, который вы задаете.

//This listener will use a weak reference, notice the last "true"
something.addEventListener("event", myFunction, false, 0, true);
//This is called a weak reference listener.
//The ussual listener, with default parameters, is a strong refence listener.

Справочник EventDispatcher

Таким образом, объект будет подвергаться сборке мусора, если все ссылки на этот объект будут удалены. Прослушиватели, добавленные с параметрами по умолчанию, учитываются в этих ссылках (поскольку последнее значение параметра по умолчанию - false). Таким образом, при наличии мувиклипа с прикрепленными к нему или со всеми его дочерними прослушивателями, удалив его из списка отображения, клип НЕ будет собираться мусором до тех пор, пока ссылки на слушателей также не будут удалены (с помощью метода removeEventListener). 1012 *

Если вы используете слабые ссылки в клипе или любом из его дочерних элементов, удаление его из списка отображения приведет к сборке мусора. Имейте в виду, что это может произойти через некоторое время, поэтому такие события, как ENTER_FRAME, все еще могут запускаться и вызываться до тех пор, пока объект не будет окончательно собран.

0 голосов
/ 22 февраля 2010

Я думаю, достаточно для удаления Child (MC), затем MC = null или удаления MC. Я думаю, что delete выполнит работу, если вы читаете спецификации из Adobe, я думаю, что вы также можете вызвать System.gc, но это для AIR. приложения.

...