NSString
//----------------NSString初始化方式-------------
NSString *str1 = @"Hello World!"; // 字面常量
NSString *str2 = [[NSString alloc]initWithCString:"Hello World!" encoding:NSUTF8StringEncoding]; // 初始化器
NSString *str3 = [NSString stringWithCString:"Hello World!" encoding:NSUTF8StringEncoding]; // 工厂方法
恒定性
字符串是恒定的,申请之后就会在堆上申请一块固定的空间。然后当有另一个指针指向内容相同的字符串时,共享同一个对象。目的是为了节省空间,减少重复字符串造成的浪费。
例如以下两行代码,str1与str4是指向同一个地址的。这种共享机制只存在于字面常量申请的字符串。
NSString *str1 = @"Hello World!";
NSString *str4 = @"Hello World!";
但是,改变了str1并不会影响str4。因为实际上,字符串是不可更改的,每次更改实际上是重新申请了一段新的内存空间来装载字符串内容,并将指针地址重新赋值。
相等判定
// 判定字符串内容是否相等。此处为True,都是“Hello World!”
if( [str1 isEqualToString:str2]){
NSLog(@"str1 Value Equals str2");
}
// 判定字符串指针地址是否相等。此处为False,地址不同。
if(str1==str2){
NSLog(@"str1 Ref Equals str2");
}else{
NSLog(@"str1 Ref Not Equals str2");
}
// 此处为True,因为都是常量字符串。共享同一块地址。
if(str1==str4){
NSLog(@"str1 Ref Equals str4");
}else{
NSLog(@"str1 Ref Not Equals str4");
}
字符串基本操作
//----------------字符串基本操作,都是通过返回新值的方式进行改变-------------
NSLog(@"size: %zd, length: %zd]", sizeof(str1), str1.length);
// 遍历字符
for(int i = 0 ;i < [str1 length];i ++){
NSLog(@"%c",[str1 characterAtIndex:i]);
}
str1 = str1.uppercaseString;//大写
str1 = str1.lowercaseString;//小写
str1 = str1.capitalizedString;//首字母大写
NSRange range = [str1 rangeOfString:@"Hello"];
NSLog(@"location: %lu, length:%lu",range.location,range.length);
NSString* substr = [str1 substringFromIndex:6];
BOOL yOrN = [str1 hasPrefix:@"Hello"];
NSString* format=[NSString stringWithFormat:@"[%d, %d]",100,200];
NSMutableString
因为NSMutableString是NSString的子类,所以可以使用NSString的指针指向NSMutableString的对象,从而让该NSString变量具有可变性,但其实,本质上,这是一个NSMutableString对象。
//----------------NSMutableString的增删改查方法,会直接改变字符串------
NSMutableString *mustr3 =[NSMutableString stringWithCapacity:100];// 自定义缓存容量,这样可以减少字符串增长时改变capacity所需要性能损失。
[mustr3 appendString:@"Hello Objective"];
[mustr3 insertString:@"-C" atIndex:mustr3.length];
[mustr3 setString:@"Hi Objective"];
NSRange replaceRange = NSMakeRange(0, 2);
[mustr3 replaceCharactersInRange:replaceRange withString:@"Hello"];
NSRange deleteRange = NSMakeRange(5, 10);
[mustr3 deleteCharactersInRange:deleteRange];