Несколько вопросов для начинающих, касающихся NSString - PullRequest
0 голосов
/ 14 ноября 2010

Эй, у меня есть пара вопросов относительно NSString.

Чем отличаются эти два утверждения?

NSString *str = @"asdasd";
NSString *str = [[NSString alloc] initWithString:@"asdasd"];

Верно ли, что другая является статической строкой, которая не освобождается из памяти до закрытия программы? Я всегда использовал второй метод и выпустил его, когда он мне больше не нужен. Могут ли некоторые объяснить немного больше?

1 Ответ

4 голосов
/ 14 ноября 2010

Теоретически они разные. Первая строка является константой и не может быть released. Второй (опять-таки теоретически) размещается в куче и должен быть released, когда вы закончите с ним. (Это согласно правилам управления памятью)

Однако в данном конкретном случае разницы нет, потому что инициализатор просто вернет исходную строку. поскольку компилятор достаточно умен, чтобы видеть, что «ага, вы выделяете неизменный объект из константной строки, поэтому результирующая строка гарантированно будет идентична исходной константной строке, поэтому я могу просто пропустить все выделение вещь и просто повторно использовать постоянную строку ".

Так что получается, что они будут одной и той же строкой. Тем не менее, ваши начальные реакции кишечника являются правильными, и вы должны продолжать следовать им. :)

...