Всегда старайтесь делать то, что кажется естественным.Если вы назначаете постоянную строку, то сделайте это, то есть первый вариант.Строки @"..."
являются очень эффективными константами, которым не нужно управлять памятью, поэтому используйте их, если это имеет смысл.
NSLog(@"%p", @"XX");
NSLog(@"%p", @"XX");
NSLog(@"%p", @"XX");
Результат:
0xa2424
0xa2424
0xa2424
т.е. все они являются одним и тем же объектом в памяти.
NSLog(@"%p", [NSString stringWithString:@"XX"]);
NSLog(@"%p", @"XX");
NSLog(@"%p", [NSString stringWithString:@"XX"]);
Также приводит к:
0xa2424
0xa2424
0xa2424
Как вы можете видеть из этого, нет никакой разницы между двумя объектами, поэтому использование -stringWithString:
- это просто дополнительное сообщение для отправки.Сказав это, накладные расходы обычно не достаточно велики, чтобы иметь значение, так что в любом случае это не должно быть большим делом.Лично я бы пошел с методом один, поскольку использование метода два не имеет смысла, это просто дополнительный код.
Однако
NSLog(@"%p", [NSString stringWithFormat:@"XX"]);
NSLog(@"%p", [NSString stringWithFormat:@"XX"]);
NSLog(@"%p", [NSString stringWithFormat:@"XX"]);
Результат:
0x7f86730
0xf8479b0
0x8a4cdb0
Как видите, новая строка создается каждый раз, так как предоставленная вами строка является просто строкой формата, используемой для обработки следующих переменных подстановки, поскольку у вас нет ни одной строки, исключающей stringWithFormat:
, если она вам не нужна.
(Очевидно, все адреса являются примерами ...)