NSString *str1 =@"aThinkbomb";
NSString *str2 = [[NSString alloc]initWithString:str1];
NSString *str3 = [NSString stringWithString:str1];
NSString *str4 = [[NSString alloc]initWithFormat:@"aThinkbomb %@ %d",@"abc",123];
NSString *str5 = [NSString stringWithFormat:@"aThinkbomb %@ %d",@"abc", 123];
NSLog(@"%@...%p", str1, str1);
NSLog(@"%@...%p", str2, str2);
NSLog(@"%@...%p", str3, str3);
NSLog(@"%@...%p", str4, str4);
NSLog(@"%@...%p", str5, str5);
2014-05-31 10:25:26.641 NSsummary[784:303] aThinkbomb...0x100001070
2014-05-31 10:25:26.642 NSsummary[784:303] aThinkbomb...0x100001070
2014-05-31 10:25:26.643 NSsummary[784:303] aThinkbomb...0x100001070
2014-05-31 10:25:26.643 NSsummary[784:303] aThinkbomb abc 123...0x10010b250
2014-05-31 10:25:26.644 NSsummary[784:303] aThinkbomb abc 123...0x10010b300
这是个标准的字符串初始化方法。str2、str3是把str1的地址拷贝过来的。大家可以看到str1、str2、str3地址一样,说明指针指在同一个堆内存地址上。
但是不能这样写:
NSString *str2 = [[NSStringalloc]initWithString:@"aThinkbomb"];
NSString *str3 = [NSStringstringWithString:@"aThinkbomb"];
直接给字符串会有警告,这样就等于str1。initWithString和stringWithString只可以写字符串变量,后者是前者的便利构造器。
str3、str4是格式化输出字符串,后者是前者的便利构造器。
NSString *str6 =[NSStringstringWithUTF8String:"大家好"];
stringWithUTF8String是initWithUTF8String的构造便利器
NSString *str7 =[[NSStringalloc]initWithUTF8String:"大家好"];
stringWithContentsOfURL 将网页转换成字符串(便利构造器)
NSUTF8StringEncoding用UTF8编码
error:&error 如果有错误error就会被赋值,localizedDescription按照将本地的信息描述。
下面是从本地文件获取字符串
NSString *filePath =@"/Users/dlios/Desktop/Object-C/Demo/Demo/area.txt";
NSError *error1 = nil;
NSString *str8 = [NSStringstringWithContentsOfFile:filePath encoding:NSUTF8StringEncodingerror:&error1];
if (error1) {
NSLog(@"error : %@", [error1localizedDescription]);
exit(1);
}
NSMutableString是可变字符串, 对字符串的改变是在原串上改变, 用法和NSString相同, 只是 NSString是不可变字符串, 对字符串的改变是返回一个新的字符串。便利构造器可以自动释放内存。以init开头的指派初始化方法不能释放内存。