Случай 1
Из перечисленных вариантов я бы использовал:
NSMutableString *str3 = [NSMutableString stringWithCapacity:1000];
… если вы знаете размер пункта назначения или оцените его с небольшимкомната в верхней части и могут быстро определить точный размер или сценарий размера наихудшего случая, это может сэкономить несколько операций перераспределения и копирования.Если вы не знаете размер в худшем случае или если для его расчета требуется много времени, то вы также можете использовать [NSMutableString string]
или [NSMutableString new]
.Кроме того, *WithCapacity
- это подсказка, которую платформы могут игнорировать.
Конечно, тело вашего цикла и размер, который вы резервируете, также подразумевают, что все значения равны [0… 9] (в частности,, что все значения потребляют один символ), и в этом случае вы, вероятно, могли бы добиться большего успеха, используя строки формата с большим количеством аргументов.Однако i
явно больше 9 для большинства итераций и потребляет в среднем по 3 символа каждый, поэтому 3000 будет более подходящей резервной емкостью для точного отправленного вами кода.
Случай 2
Из перечисленных опций я бы использовал:
NSMutableString *str4 = [NSMutableString string];
Еще лучше, если вам не нужно добавлять его в пул автоматического выпуска: [NSMutableString new]
или [[NSMutableString alloc] init]
.
Другие примечания
Да, исключение объектов из пулов автоматического выпуска (например, использование alloc + init) может повысить производительность и значительно снизить пиковое использование памяти.Иногда это не зависит от вас, а в некоторых средах (например, ARC) это может произойти, даже если вы используете удобный автоматический конструктор - например, [NSMutableString string]
.
Более быстрое решение
Наконец, если описанный вами случай действительно является проблемой производительности, самым быстрым способом было бы создать буфер char
в стеке, а затем создать один NSString
из результата копирования чисел вchar
буфер.Предполагая, что все ваши int
равны 0-9, это будет очень быстро и просто, а затем просто создайте NSString
из (прекращенной) строки.Вы даже можете сделать это, если размер входного файла изменяется или очень велик (в результате получается очень длинная строка).