Что такое reserve capacity у коллекций в Swift?

«Что такое reserve capacity у коллекций в Swift?» — вопрос из категории Swift Core, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

reserveCapacity(_:) — это метод для предварительного выделения памяти под определённое количество элементов в коллекции (массив, словарь, множество). Это оптимизация производительности, которая минимизирует количество дорогостоящих операций перераспределения памяти при последующем добавлении элементов.

Зачем это нужно? Без резервирования коллекция динамически увеличивает свой буфер по мере роста, что может приводить к множественным копированиям данных (реаллокациям). Резервирование устраняет эту проблему.

Пример с массивом:

var numbers: [Int] = []
// Резервируем память под 1000 элементов ДО начала добавления.
numbers.reserveCapacity(1000)

for i in 1...1000 {
    numbers.append(i) // Добавление происходит быстро, без реаллокаций.
}
print(numbers.count) // 1000

Ключевые особенности:

  • Не изменяет логический размер коллекции (count).
  • Гарантирует, что добавление до n элементов не вызовет реаллокацию.
  • Особенно полезно при известном ожидаемом размере коллекции (например, при парсинге большого JSON).
  • Для Dictionary и Set оптимизирует внутреннюю хеш-таблицу, уменьшая количество коллизий.