Вполне возможно и даже вероятно, что существуют оптимизации, которые допускаются только тогда, когда строки неизменны.
На самом деле работает
NSString *A = @"Bob";
NSString *B = @"Bob";
в отладчике сразу показывает, что оба они являются указателями на одну и ту же строку. На самом деле
NSString *C = [NSString stringWithString:@"Bob"];
NSString *D = [A copy];
оба указывают на один и тот же адрес памяти. Тем временем
NSString *E = [NSMutableString stringWithString:@"Bob"];
указывает на другую строку.
Так что да, использование NSStrings в некоторых случаях более эффективно. И вообще какао позволяет возвращать новую копию строки, а не отредактированную. Тем не менее, я не могу утверждать, что вы не должны использовать изменяемую строку везде, но она, кажется, идет вразрез с общими рекомендациями для платформы.
В моей собственной работе я склонен использовать только изменчивые варианты, когда мне нужно редактировать вещи напрямую. Это всего лишь немного отсталая от стиля C / C ++: все изменяемое, если вам не нужен const, все является const, если вам не нужна изменчивость.