NSString
является чем-то особенным, когда дело доходит до управления памятью. Строковые литералы (что-то вроде @"foo"
) по сути являются одиночными, каждая строка с одинаковым содержимым - это один и тот же объект, потому что он все равно не может быть изменен. Поскольку [NSString new]
всегда создает пустую строку, которая не может быть изменена, вы всегда получите тот же экземпляр, который не может быть освобожден (таким образом, высокий retainCount
).
Попробуйте этот фрагмент:
NSString *string1 = [NSString new];
NSString *string2 = [NSString new];
NSLog(@"Memory address of string1: %p", string1);
NSLog(@"Memory address of string2: %p", string2);
Вы увидите, что обе строки имеют один и тот же адрес памяти и, следовательно, являются одним и тем же объектом.