在NSMutableString上使用substringFromIndex

为什么substringFromIndex不适用于我的NSMutableString

这里的代码类似于我所拥有的:

 NSMutableString *myString = [[NSMutableString alloc] initWithString:@"This is my String"]; [myString substringFromIndex:5]; NSLog(@"myString = %@", myString); //will output This is my String 

如果我在NSString上使用substringFromIndex ,它将起作用,例如:

 NSString *tempStr = [[NSString alloc] init]; tempStr = [myString substringFromIndex:5]; NSLog(@"tempStr = %@", tempStr); //will output is my String 

为什么它在第一个例子中不起作用,而且我还有一个问题,如果我使用第二种方法来做,然后设置:

 [myString setString:tempStr]; [tempStr release]; 

这将导致崩溃,我想,因为我在NSMutableString上使用setString,我不需要NSString ,我释放它,但显然情况并非如此,但如果我使用autorelease它会是OK

该方法永远不会改变你所说的string。 它在两种情况下都返回一个新的string。 所以把它分配给一个新的stringvariables和你的好。


它是因为你释放一个对象而泄漏另一个而崩溃。 你alloc第一个string,然后从substringFromIndex:创build一个新的自动释放string,然后释放它。 你不需要努力尝试。

简单地将substring方法的输出分配给一个variables,让它自动释放给你。 没有分配,没有释放。


一个完整的例子可能看起来像这样:

 NSMutableString *myString = [[NSMutableString alloc] initWithString:@"This is my String"]; NSString *tmpString = [myString substringFromIndex:5]; NSLog(@"tempStr = %@", tempString); [myString setString:tempStr]; // later do [myString release] 

甚至更简单:

 NSString *myString = @"This is my String"; myString = [myString substringFromIndex:5]; 

你特别创build一个NSMutableString,所以你可以修改它。

但是没有人知道这样做的方法:

[myMutableString substringFromIndex:5];

如果你打算这样做:

myMutableString = [myMutableString substringFromIndex:5];

为什么甚至首先使用可变的。

MutableStrings非常适合添加 (追加)到它们。

不知道为什么我们不能也缩短(子串)他们。 (没有制作新的副本)

[myString substringFromIndex:5]返回一个从指定索引开始的新的NSString 。 它不会修改myString

试试这个代码:

 NSLog(@"myString = %@", [myString substringFromIndex:5]);