+ [NSString stringWithString:] — какой смысл?

Перейти в Windows-> Показать представление-> Консоль или Alt + Shift + Q, C

Консоль появляется на вкладке с видом проблемы

18
задан Josh Caswell 17 August 2014 в 16:54
поделиться

6 ответов

You might have a NSMutableString (or some home-grown NSString subclass) that you want to duplicate.

NSMutableString *buffer = [NSMutableString string];
// do something with buffer
NSString *immutableStringToKeepAround = [NSString stringWithString:buffer];

Of course, you can also just make a copy:

NSMutableString *buffer = [NSMutableString string];
// do something with buffer
NSString *immutableStringToKeepAround = [[buffer copy] autorelease];

but you own the copy and must release or autorelease it.

21
ответ дан 30 November 2019 в 07:44
поделиться

As "Andy" points out in #318666, it's related to memory management, quoting:

The difference between initWithString and stringWithString is that stringWithString returns an auto-released pointer. This means that you don't need to release it specifically, since that will be taken care of next time that the auto-release pool cleans up any auto-released pointers.

initWithString, on the other hand, returns a pointer with a retain count of 1 - you do need to call release on that pointer, or else it would result in a memory leak.

(Taken from here)

9
ответ дан 30 November 2019 в 07:44
поделиться

Возвращает строку, созданную путем копирования символов из другой данной строки

[NSString stringWithString:@"some string"]

Это эквивалентно

[[[NSString alloc] initWithString:@"some string"] autorelease]
1
ответ дан 30 November 2019 в 07:44
поделиться

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

1
ответ дан 30 November 2019 в 07:44
поделиться

В качестве другого варианта использования, если (по какой-либо причине) вы создаете свой собственный подкласс NSString или NSMutableString, stringWithString: предоставляет удобный способ создать его экземпляр с экземпляром либо NSString, NSMutableString, либо MyCustomString.

1
ответ дан 30 November 2019 в 07:44
поделиться

Я часто использую + stringWithString: , когда мне нужно создать NSMutableString , но начинать его с начального значения. Например:

NSMutableString * output = [NSMutableString stringWithString:@"<ul>"];
for (NSString * item in anArray) {
  [output appendFormat:@"<li>%@</li>", item];
}
[output appendString:@"</ul>"];
0
ответ дан 30 November 2019 в 07:44
поделиться