为什么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];
这会导致崩溃,我想,因为我在NSMutableString
上使用了setString,我不需要NSString
并且我释放它,但显然事实并非如此,但是如果我用autorelease就可以了
答案 0 :(得分:4)
该方法永远不会改变您调用它的字符串。它在两种情况下都返回一个新字符串。所以将它分配给一个新的字符串变量和你的好。
它崩溃了,因为你过度释放一个物体并泄漏另一个物体。您alloc
第一个字符串,然后从substringFromIndex:
创建一个新的自动释放字符串,然后释放它。你不需要这么努力。
只需将substring方法的输出分配给变量,然后让它自动释放。没有分配,没有发布。
完整正确的示例可能如下所示:
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];
答案 1 :(得分:2)
您专门创建一个NSMutableString,以便您 CAN 修改它。
但没有人知道如何做到这一点:
[myMutableString substringFromIndex:5];
如果你打算这样做:
myMutableString = [myMutableString substringFromIndex:5];
为什么甚至首先使用mutable。
MutableStrings非常适合 ADDING (追加)给他们。
不确定为什么我们也不能缩短(子串)它们。 (没有制作新的副本。)
答案 2 :(得分:1)
[myString substringFromIndex:5]
返回从指定索引开始的新NSString
。它不会修改myString
。
尝试使用此代码:
NSLog(@"myString = %@", [myString substringFromIndex:5]);