Ситуация Шлемеля сама по себе не возникает, поскольку все внутренние представления NS / CFString используют явную длину, как и все реализации в здравом уме.(Несколько измененная версия источника базовых типов CoreFoundation из OS X 10.6.2 доступна здесь .) Реальный вопрос касается затрат на распределение.
В опубликованном коде изменяемыйБуферы строк увеличиваются на 50% за раз, если они не очень велики (по крайней мере, ULONG_MAX / 3UL
), давая O (log n) для перераспределений для практических сценариев.Использование подхода NSArray
должно привести к одному выделению.С другой стороны, если вы строите строку по частям и освобождаете ее во время работы, вы можете получить меньше кеша / виртуальной памяти.
Таким образом, в принципе, применяется золотое правило оптимизации: если бенчмаркинг показывает проблемуна большом, но реалистичном наборе данных), попробуйте оба.