Почему substringFromIndex
не работает для моего NSMutableString
?Использование substringFromIndex на NSMutableString
Вот код похож на то, что у меня есть:
NSMutableString *myString = [[NSMutableString alloc] initWithString:@"This is my String"];
[myString substringFromIndex:5];
NSLog(@"myString = %@", myString); //will output This is my String
Если я использую substringFromIndex
на NSString
он будет работать, например, вот так:
NSString *tempStr = [[NSString alloc] init];
tempStr = [myString substringFromIndex:5];
NSLog(@"tempStr = %@", tempStr); //will output is my String
Почему это не работает в первом примере , и у меня есть еще один вопрос, если я это сделаю с использованием второго метода, а затем устанавливаю:
[myString setString:tempStr];
[tempStr release];
Это, как я думал, приведет к сбою, так как я использовал setString на NSMutableString
, что мне не нужен NSString
, и я его выпустил, но, видимо, это не так, однако, если я использую autorelease, будет ОК
Но почему это не позволяет мне делать: myString = [myString substringFromIndex: 5]; Почему это переопределяет, если я освобождаю tempStr, так как мне больше не нужен tempStr, но мне понадобится myString еще немного ... – Ladislav
'[[NSString alloc] init]' инициализирует новый строковый объект. Но 'substringFromIndex:' возвращает совершенно другой строковый объект. Таким образом, тот, который вы только что создали, никогда не используется. И что еще хуже, это утечка, так как вы никогда не выпускаете этот объект. Объекты, возвращаемые из методов, автореализовываются. Смысл они освобождают себя, когда он безопасен. Таким образом, вы освобождаете этот объект с автореализованной строкой, и когда автореферат позже запускает его, он уже был освобожден, и вы получаете сбой. –
Есть ли разница в использовании NSMutableString или NSString в случае, если вы хотите либо подстроки, либо если вы хотите добавить к ней строки? NSString имеет stringByAppendingString и NSMutableString имеет appendString ... – Ladislav