Ответ
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оптимизирует внутреннюю хеш-таблицу, уменьшая количество коллизий.