Назначить NSString после alloc / init - PullRequest
0 голосов
/ 08 июня 2011

Это не похоже на работу:

NSString *string = [[NSString alloc] init];
string = @"%@M", anotherstring;

Я ожидаю, что это сделает "строку" равной "5М", если "другая строка" равна "5".

Этоне правильный синтаксис?Теперь я мог бы использовать initWithFormat, и он работал бы, но как вы можете разделить его на две разные строки и также работать?

Ответы [ 4 ]

3 голосов
/ 08 июня 2011

В вашем коде есть две ошибки. Во-первых, NSString являются неизменяемыми, и как только вы выделяете и инициализируете их, они устанавливаются, и их невозможно изменить. Для этого вам нужно заглянуть в NSMutableString.

Во-вторых, синтаксис вашего кода не имеет смысла. @"%@M", anotherString не является допустимым вызовом метода Objective C. Вы действительно ищете -initWithFormat: для выполнения желаемой операции. Код должен выглядеть так:

NSString *string = [[NSString alloc] initWithFormat:@"%@M", anotherString];

Узнайте больше о NSString и о том, как его использовать, в документе Справочник по программированию NSString и в Руководстве по программированию String , чтобы понять, как работать со строками в какао и Objective-C.

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

Как насчет

NSString* string;
string = [[NSString alloc] initWithFormat:@"%@M", anotherString];

Имейте в виду, что оператор = является присваиванием.Каждый раз, когда вы используете его, любое значение, хранящееся в вашей переменной, перезаписывается новым.Таким образом, даже если ваш исходный код был синтаксически корректным, он все равно имеет ошибочную семантику, которая в этом случае может привести к утечке памяти.

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

Эта строка:

string = @"%@M", anotherstring;

синтаксически правильно, но оно не делает то, что вы хотите. Вот как вы форматируете строку:

NSString *string = [[NSString alloc] initWithFormat:@"%@M", anotherstring];

Нет смысла разделять его на две строки. Это:

NSString *string = [[NSString alloc] init];
string = [[NSString alloc] initWithFormat:@"%@M", anotherstring];

создаст дополнительный NSString объект, а также вызовет утечку памяти.

0 голосов
/ 19 августа 2011

просто превратите его в свойство, и вам не нужно беспокоиться об освобождении и сохранении «строки» (то есть, если вы создадите ее автоматически с помощью synthesize).и не забудьте автоматически высвободить объект, присваиваемый свойству:

self.string = [[[NSString alloc] init] autorelease]

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