Ответ
Массивы в Swift хранят элементы как сильные (strong) ссылки. Это означает, что добавление объекта в массив увеличивает его счетчик ссылок (retain count) в ARC, предотвращая освобождение памяти.
Пример и последствия:
class Item {
let id: String
init(id: String) { self.id = id; print("(id) создан") }
deinit { print("(id) уничтожен") }
}
var container: [Item]? = [Item(id: "A")] // Счетчик для объекта "A" = 1 (массив).
container?.append(Item(id: "B")) // Счетчик для "B" = 1.
// При обнулении массива все сильные ссылки из него пропадают.
container = nil
// Консоль:
// A создан
// B создан
// B уничтожен
// A уничтожен
Важное замечание: Это может приводить к циклам сильных ссылок (retain cycles), если элементы массива сами сильно ссылаются друг на друга или на содержащий их массив. В таких случаях необходимо использовать weak или unowned ссылки внутри самих классов элементов, но не в определении массива ([Weak<Item>] — невалидно).