Мои знания AS3 довольно ржавые, но, поскольку характер этого вопроса довольно общий для любой практики программирования, я все же постараюсь ответить на него независимо от языка. Мое решение может быть не лучшим, если AS3 предлагает конкретный механизм для достижения того, чего вы хотите, но вам придется прислушиваться к другим людям.
С точки зрения общего программирования существенная проблема заключается в том, что множественные ссылки, указывающие на один и тот же объект, не знают друг о друге. Назначение одной из ссылок на null просто перенаправляет указание этой одной переменной, оно не уведомляет другие ссылки об изменении и, как правило, не изменяет состояние самого объекта, таким образом, другие ссылки все еще остаются указывающими на объект. Вы хотите, чтобы присвоение null означало «освободить этот объект и аннулировать все ссылки на него» семантически, но это не происходит из-за механизма сборки мусора.
Правильный способ справиться с этой ситуацией - правильно использовать ссылки - если вы хотите, чтобы объект исчез, установите для всех ссылок на него значение null. Однако, в зависимости от того, что вы хотели бы сделать в вашем случае (я чувствую, что вы пытаетесь сделать что-то немного неортодоксальное), это может оказаться невозможным. Возможно, вы сможете использовать массив в качестве основного списка и единственного места, где существуют указатели на объект, и всегда ссылаться на объект путем индексации в массиве в другом месте.
Если вам нужно сделать то, что вы сказали, самое простое решение, о котором я могу подумать, - позволить самому объекту иметь флаг (был ли он помечен для выпуска или нет), чтобы служить способом связи между всеми ссылками. , Установите флаг в true всякий раз, когда вы устанавливаете ссылку на ноль. Проверьте флаг перед разыменованием любой ссылки. Я не знаю, есть ли встроенное свойство в MovieClip, которое служит аналогичной цели, но AS3 является динамическим, и вы всегда можете добавить свойства самостоятельно. На других языках вы можете создать обертку вокруг него, чтобы нести флаг. Однако имейте в виду: это изгибает одну из фундаментальных концепций программирования (ссылки указывают на то, что объект не общается друг с другом), и если вы не будете осторожны, вы можете получить сюрпризы тут и там.