Каковы последствия производительности NSString против NSMutableString для объединения? - PullRequest
2 голосов
/ 24 марта 2011

Каковы значения производительности NSString по сравнению с NSMutableString для конкатенации?

В Java объединение двух строк может привести к тому, что компилятор их объединит, что сделает его более оптимизированным. Если я использую initWithFormat метод NSString для объединения двух литеральных строк, происходит ли такая оптимизация в Objective-C?

Кроме того, есть ли штраф за производительность, который я выплачиваю, объединяя переменную с литералом, используя NSString вместо NSMutableString?

Вот пример:

if (![self.addressField.text hasPrefix:@"http"])
{
    NSString* newAddress = [[NSString alloc] 
       initWithFormat:@"http://%@", self.addressField.text];
    [self.addressField setText:newAddress];
    [newAddress release];
}

Я бы посчитал NSMutableString более похожим на StringBuilder или StringBuffer классы в Java. Эти классы больше подходят для объединения нескольких или неопределенного количества строк. Если во время компиляции вы знаете, что объединяете только две строки, почему бы не объединить их, используя уже используемые классы (NSString)?

1 Ответ

0 голосов
/ 24 марта 2011

Если вы хотите выяснить, что является более эффективным, зарегистрируйте отметку времени, а затем вызовите ее 1000 раз в цикле, затем измените ее на NSMutableString и сделайте то же самое, вы увидите, что быстрее. это такая маленькая разница в схеме вещей. но если вы хотите, вы можете уменьшить количество строк кода:

if (![self.addressField.text hasPrefix:@"http"]){
    [self.addressField setText: [NSString stringWithFormat:@"http://%@",self.addressField.text]];
}
...