Objective-C裡核心的處理字符串的類就是NSString和NSMutableString這兩個類,這兩個類完成了Objective-C中字符串大部分功能的處理。這兩個類的最主要的區別是NSString創建賦值後不能動態修改長度和內容,除非給重新賦值。而NSMutableString類似與鏈表的,在創建賦值後可以進行修改長度,插入,刪除等操作。
NSString提供了許多創建和初始化新字符串的方法。下面這個是創建常量字符串的。 它是編譯到可執行文件中的NSString的實例,它不會在內存中消失。例子:
1、創建常量字符串。
NSString *astring = @"我是字符串";
2、NSString的內存地址
當我們聲明一個字符串時,NSString *aString;
變量aString並不是真正包含一個字符串對象,它是指向內存中字符串對象的指針,我們稱之為對象標識符,因為它是表示內存中的一個對象而不是保存這個對象,指針是一個內存位置的地址,下面考慮用“==”來比較字符串,來看個例子
NSString string1 = @"我是甲一號";
NSString *string2 = @"我是甲一號";
BOOL result = string1==string2;
這個result的值是NO,這裡你對比的是內存地址,string1和string2是兩個靜態的對象,在內存中存儲的地址是不同的,所以就是NO了。
如果這樣做
NSString *string1 = @"我是甲一號";
NSString *string2 = string1;
BOOL result = string1==string2;
這時候result的值就是YES了
看個例子就明白了。下面是字符串內存地址的例子
- //內存指向
- NSString *bstring = @"我是字符串";
- NSString *astring = [[NSString alloc] init];
- NSLog(@"astring point address:0x%.8x", astring);
- NSLog(@"bstring point address:0x%.8x", bstring);
- astring=@"我是字符串";
- NSLog(@"重新賦值之後的astring point address:0x%.8x", astring);
- NSLog(@"astring:%@",astring);
打印結果如下:
- 2012-06-14 11:35:31.226 NSString[2316:f803] astring point address:0x00b72a7c
- 2012-06-14 11:35:31.227 NSString[2316:f803] bstring point address:0x000045bc
- 2012-06-14 11:35:31.227 NSString[2316:f803] 重新賦值之後的astring point address:0x000045bc
- 2012-06-14 11:35:31.227 NSString[2316:f803] astring:我是字符串
重新賦值後,astring 的地址和bstring地址一樣了。
3、NSString字符串的比較
在NSString中,最直接的就是用isEqualTostring這個方法
- NSString* string1 = @"我是甲一號";
- NSString *string2 = @"我是甲一號";
- BOOL result = [string1 isEqualToString:string2];
- if (result) {
- NSLog(@"字符串相同");
- }
打印結果:
- 2012-06-14 11:49:10.442 NSString[2481:f803] 字符串相同
另外一個比較的方法:compare,他可以比較字符串的大小,它的返回類型是:NSOrderedAscending,NSorderedSame,NSorderedDescending(分別等於整數-1,0,1)。
- NSString* string1 = @"我是甲一號";
- NSString *string2 = @"我是甲一號";
- BOOL result = [string1 compare:string2];
- if (result == NSOrderedSame) {
- NSLog(@"字符串相同");
- }