建立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;
}