Выбор ответа Middle Коллекции и строки обновлено

Substring и память

Вопрос

Парсер сохраняет в кеш Substring, вырезанные из ответа сервера на 5 МБ. Чем это плохо?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Каждый Substring держит весь исходный буфер на 5 МБ. Substring это окно в исходную строку без копирования: дешёвый для временной обработки, но удерживающий весь оригинал.

Варианты ответа

  1. Substring копирует данные, и память удваивается
  2. Substring нельзя хранить в коллекциях и кешах
  3. Substring становится невалидным после выхода из функции
  4. Каждый Substring держит весь исходный буфер на 5 МБправильный ответ

Разбор

Substring это окно в исходную строку без копирования: дешёвый для временной обработки, но удерживающий весь оригинал. Для долгого хранения переводят в String(substring), тогда копируются только нужные символы. Хранить Substring в коллекциях можно, и он не «протухает», в Swift память управляется ARC. То же верно для ArraySlice.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.