Ответ
При добавлении объекта в массив (Array, NSArray) счетчик сильных ссылок (retain count) этого объекта увеличивается на 1, так как коллекция создает на него сильную ссылку.
Пример:
class MyObject {}
let obj = MyObject() // Сильная ссылка 1 (от переменной `obj`)
var array: [MyObject] = []
array.append(obj) // Сильная ссылка 2 (от массива `array`)
// Общий retain count объекта = 2
Механизм и последствия:
- Удержание в памяти: Объект гарантированно не будет деаллоцирован, пока находится в массиве.
- Удаление из массива: При удалении объекта (например,
array.removeFirst()) или при очистке всего массива (array = []), соответствующая сильная ссылка уничтожается, и retain count уменьшается. - Циклы сильных ссылок: Если объект сам содержит сильную ссылку на этот массив, может возникнуть retain cycle, приводящий к утечке памяти. Для его разрыва используют
weakилиunownedссылки.
Важно: В Swift с ARC напрямую работать с retainCount не рекомендуется, но понимание этого принципа критично для управления памятью.