Строковые объявления и присваивания: 3 метода - PullRequest
2 голосов
/ 16 июня 2011

Для объявлений без сохранения строки, эти три строки одинаковы?

NSString *list2 = self.map;

NSString *list2 = [NSString stringWithFormat:@"%@", self.map];

NSString *list2 = [NSString stringWithString:self.map];

Все они создают строковый объект с автоматическим освобождением, верно?Есть ли среди них предпочтительный метод или есть какие-либо различия в использовании памяти или поведении «list2» в зависимости от этих методов?

По какой-то причине я считаю манипулирование строками в target-C наиболеезапутанный переход с других языков.

Ответы [ 2 ]

2 голосов
/ 16 июня 2011

Простой факт, Вы не являетесь владельцем объекта в вышеупомянутых трех случаях , поэтому вы можете использовать любой из них. Это больше связано с выбором разработчика, чем с производительностью.

Goчерез Руководство по программированию управления памятью

1 голос
/ 16 июня 2011

Все они создают объект строки с автоматическим освобождением, верно?

Нет, первый просто назначает указатель, возвращаемый string.map на list2. Второй и третий теоретически создают новые NSStrings, которые вам не принадлежат, и присваивают им list2. Однако, если string.map возвращает неизменяемую строку, третья , вероятно, даст вам тот же указатель (возможно, сохраненный и автоматически освобожденный).

Во всех случаях вам не принадлежит (новая) строка. Это на самом деле все, что вам нужно знать. Они могут быть автоматически выпущены, но это не относится к их использованию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...