Вопрос проверяет понимание типов ссылок и работы ARC с коллекциями.
В Swift нельзя сделать массив weak. weak применяется только к ссылкам на объекты, а не к коллекциям. Если бы это было возможно, элементы массива могли бы быть освобождены сразу. Это привело бы к непредсказуемому поведению.
Иногда возникает идея сделать массив дочерних объектов weak, чтобы избежать утечек памяти. Однако в Swift это невозможно напрямую.
Определение:weak можно применять только к свойствам, содержащим ссылку на объект, а не к контейнерам.
Нельзя написать:
weak var children: [Child] = []
Даже гипотетически такой подход был бы опасен:
элементы массива могли бы освобождаться сразу
структура теряла бы целостность
доступ к элементам стал бы небезопасным
Используют:
сильный массив детей
weak ссылку у каждого ребенка на родителя
Альтернативно:
NSHashTable с weakObjects
NSPointerArray
Коллекция дочерних объектов должна быть сильной, а предотвращение утечек достигается правильным направлением ссылок, а не weak-массивами.