创建NSString的方法:
NSString *str1 = @"Hello World";
NSString *str2 = [[NSString alloc] init];
str2 = @"Hello World";
[str2 release];
NSString *str3 = [[NSString alloc] initWithString:@"Hello World"];
[str3 release]; //内存被回收,但是变量可改变指针位置,继续使用该变量
str3 = [NSString stringWithString:@"hello"]; //这种方法不需要管理内存,因为它引用的是NSString的静态方法
//传入C语言中的字符串,转成OC字符串
NSString *str4 = [[NSString alloc] initWithUTF8String:"Hello World"];
[str4 release];
str4 = [NSString stringWithUTF8String:"hello"]; //这种方法不需要管理内存,因为它引用的是NSString的静态方法
//格式化 %.2f:float类型的,保留两位小数
NSString *str5 = [[NSString alloc] initWithFormat:@"my age is %i and height is %.2f", 25, 1.76f];
[str5 release];
str5 = [NSString stringWithFormat:@"hello"]; //这种方法不需要管理内存,因为它引用的是NSString的静态方法
以下方式存在内存泄露
//格式化 %.2f:float类型的,保留两位小数
//[[NSString alloc] initWithFormat:@"my age is %i and height is %.2f", 25, 1.76f]; 没有被释放
NSString *str5 = [[NSString alloc] initWithFormat:@"my age is %i and height is %.2f", 25, 1.76f];
//[NSString stringWithFormat:@"hello"];是自动释放的,不应该在运行[str5 release] 来释放内存
str5 = [NSString stringWithFormat:@"hello"];
[str5 release]; //野指针错误
下面是demo代码:
demo主要演示指向指针的指针、读取远程、本地文件内容的方法
#import <Foundation/Foundation.h>
void test(){
NSString *path = @"/Users/gongpb/develop/NSString/NSString/test.txt";
//过期方法,不能读取中文
NSString *str = [NSString stringWithContentsOfFile:path];
NSLog(@"text.txt content is :%@",str);
NSString *str1 = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
NSLog(@"test.txt content is :%@",str1);
/**
这种异常机制不经常使用
@try {
}
@catch (NSException *exception) {
}
@finally {
}
**/
NSError *error;
//error:(NSError **)error; **代表指向指针的指针
NSString *str2 = [NSString stringWithContentsOfFile:path
encoding:kCFStringEncodingGB_18030_2000 error:&error];
if (error==nil) {
NSLog(@"success");
}else{
NSLog(@"error : %@",error);
}
NSLog(@"text.txt content is 2:%@",str2);
// file:// 这两个反斜杠是固定的,USers前边的一个反斜杠 是代表跟路径
NSURL *url = [NSURL URLWithString:@"file:///Users/gongpb/develop/NSString/NSString/test.txt"];
NSString *urlStr1 = [NSString stringWithContentsOfURL:url
encoding:NSUTF8StringEncoding error:nil];
NSLog(@"url content is :%@",urlStr1);
//remote url
NSURL *remoteUrl = [NSURL URLWithString:@"http://www.baidu.com"];
NSString *remoteStr = [NSString stringWithContentsOfURL:remoteUrl
encoding:NSUTF8StringEncoding error:nil];
NSLog(@"remote url content is: %@",remoteStr);
}
void test1(NSString *str){
str=@"123";
}
void test2(NSString **str){
(*str) = @"456";
}
#pragma mark 字符串导出
void stringExport(){
NSLog(@"--------export--------");
NSString *str = @"123456";
NSString *path = @"/Users/gongpb/develop/NSString/NSString/abc.txt";
NSError *error;
[str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:&error];
if(error ==nil){
NSLog(@"success");
}else{
NSLog(@"error:%@", [error localizedDescription]);
}
}
int main(int argc, const char * argv[])
{
@autoreleasepool {
test();
//指针变量存的是地址
NSString *s = nil;
test1(s); //不能改变s的值
NSLog(@"s value=%@",s);
//point &s传入s的地址
test2(&s);
NSLog(@"age is %@",s);
//导出
stringExport();
}
return 0;
}