В Obj-C Как обновить существующую переменную NSString с новой форматированной строки? - PullRequest
1 голос
/ 01 июля 2010

Как мне обновить существующую переменную NSString новой форматированной строкой?

например, у меня есть переменная, подобная этой:

String1 = [NSString new];

Я хочу, чтобы этот строковый объект былвремя от времени обновляется новым форматированным содержимым в стандартном формате printf.

Я могу инициализировать новую строку NSSt с помощью сообщения initWithFormat:, но это недоступно для уже созданных объектов.

Есть идеи?Я думаю, что могу каждый раз уничтожать строку NSS и заново инициализировать новую, но является ли это правильным решением каждый раз, когда мне нужно его обновить?

Ответы [ 4 ]

5 голосов
/ 01 июля 2010

Два варианта:

  1. Создать новую строку каждый раз с помощью [[NSString alloc] initWithFormat:@"whatever"] и присвоить ее переменной.(Убедитесь, что вы следуете правилам управления памятью , которые включают в себя проверку того, что предыдущее значение строки освобождено. Конечно, вам нужно будет следовать этим правилам независимо от того, как вы решите эту проблему.)

  2. Создайте NSMutableString и обновите строку с помощью методов мутации (appendFormat:, setString:, deleteCharactersInRange: и т. Д.).В этом случае вы обновляете не только переменную, но и саму строку.

Лично я бы использовал метод 1, каждый раз создавая новую строку NSString.Таким образом, мне не нужно возиться с мутацией, и я могу просто создать строку с точным значением, которое я хочу.

3 голосов
/ 01 июля 2010

Строки в Какао являются неизменными объектами.

Это означает, что вы не будете менять ту же строку, а просто освободите старую и выделите новую NString с вашим обновленным контентом.

Конечно, это не проблема, поскольку у вас будет ссылка NSString*, которая будет указывать на последнюю обновленную строку.

NSString myString = [NSString stringWithFormat:...];

// do whatever

myString = [NSString stringWithFormat:..]
0 голосов
/ 01 июля 2010

Самое простое, что нужно сделать, это просто всегда использовать «фабричные» методы, которые дают вам автоматически освобожденный неизменяемый объект.Фактически, вы в основном делаете это всякий раз, когда создаете строку NSString, которая содержит некоторый статический текст.

Например:

NSString *myString = @"myString";
myString = [NSString stringWithFormat:@"myStringWithFormat"]; // Update it to something else
myString = [NSString stringWithFormat:@"The current date is: %@", [NSDate now]]; // Update it again

Все три из приведенных выше примеров являются неизменяемыми строками, которые имеют общий refколичество 0. Вам не нужно беспокоиться об их освобождении или распределении.

0 голосов
/ 01 июля 2010

Существует NSMutableString, который можно изменить после инициализации.Вы можете добавить отформатированную строку, используя appendStringWithFormat:.Но если вы хотите заменить всю строку, просто создайте другую.Это не стоит много времени и ресурсов.

Это зависит от вкуса, но я против повторного использования переменной, как предложил Джек.Это часто просто смущает меня, я предпочитаю создавать новое имя переменной всякий раз, когда я создаю новую строку, как в

 NSString* myString = [NSString stringWithFormat:...];

 // do whatever

 NSString*myString2 = [NSString stringWithFormat:...];

Другое дело, что new не широко используется в мире Objective-C.Если вы используете это, потому что это звучит знакомо из вашего фона C ++ и т. Д., Рассмотрите возможность использования [[Class alloc] initWith...].

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