Я просто продолжу @ ответ Хуана - GC нужно рассматривать с нуля как критически важный аспект разработки приложений. Если вы создаете объект, вы должны знать каждую ссылку на него, удалять каждую ссылку и обнулять ее, чтобы правильно пометить @. Если вы ссылаетесь на этот объект в массиве, это считается, если вы ссылаетесь на него в слушателе, это считается, если вы ссылаетесь на него через локальную переменную, это тоже считается (хотя только в течение жизни функции), если его просто в список отображения, который определенно считается, и так далее.
Я дошел до того, что написал свои операторы удаления прослушивателя, прежде чем добавить их , просто чтобы убедиться, .
Я почти всегда напишу открытый метод destroy () для любого объекта, который будет обрабатывать иерархии внутренних объектов (родительские вызовы destroy для child, которые, в свою очередь, вызывают destroy для любых дочерних объектов и т. Д. И т. Д.). Простое удаление / обнуление родителя без того, чтобы сделать это для каждого ребенка, - плохое управление GC.
И если у вас есть какие-либо опасения, что возникла утечка памяти, отследите System.totalMemory, чтобы убедиться:
var mem:String = Number( System.totalMemory / 1024 / 1024 ).toFixed( 2 ) + ‘Mb’;
trace( mem ); // eg traces “24.94Mb”
В основном - просто будьте методичны в этом - это не ракетостроение, но вы должны быть осторожны.
Приветствия -
@ и даже если вы это сделаете, Flash решает, когда на самом деле делать зачистку. Лучшее, что мы можем сделать, это убедиться, что объект правильно помечен и верит , что с ним будет эффективно работать.