朋友前几天跟我说一个需求,说是有几个按钮,点一下,就将按钮上的字添加到 一字符串中,再点一下就从这个字符串中删除按钮上的字。 需求不难,但在实现时我发现了几个需要注意的点,下边是代码:
//这样写程序有警告,而且会crash
- (void)test {
NSString* str1 = @"XXX";
NSString* str2 = @"I love you";
NSMutableString* str = [str1 stringByAppendingString:str2];
if ([str rangeOfString:str2].location != NSNotFound) {
NSRange range = [str rangeOfString:str2];
[str deleteCharactersInRange:range];
NSLog(@"str=%@",str);
}
}
上边的程序之所以崩溃,原因在于方法中第三行代码
NSMutableString* str = [str1 stringByAppendingString:str2];
因为stringByAppendingString: 方法是NSString.h的方法,他返回一个NSString,是不可变的,这样直接付给一个可变的字符串str,则会报警告,这样会导致str不可变。从而在进行删除操作时会崩溃。 下边是我修改后的代码:
- (void)test {
NSString* str1 = @"XXXX";
NSString* str2 = @"I love you";
NSMutableString* str3 = [str1 stringByAppendingString:str2];
//只需在这里多写一步,调用NSMutableString的初始化方法用str3初始化str,这样便会正常生成可变字符串。
NSMutableString* str = [NSMutableString stringWithString:str3];
if ([str rangeOfString:str2].location != NSNotFound) {
NSRange range = [str rangeOfString:str2];
[str deleteCharactersInRange:range];
NSLog(@"str=%@",str);
}
}