容芳志专栏 发表于 2012-12-19 22:16:13

Objective-C语法之字符串NSString

<div id="cnblogs_post_body">Objective-C里核心的处理字符串的类就是NSString和NSMutableString这两个类,这两个类完成了Objective-C中字符串大部分功能的处理。这两个类的最主要的区别是NSString创建赋值后不能动态修改长度和内容,除非给重新赋值。而NSMutableString类似与链表的,在创建赋值后可以进行修改长度,插入,删除等操作。
注:以下代码运行环境是:XCode 4.3.2 ,IOS 5.1。
NSString提供了许多创建和初始化新字符串的方法。下面这个是创建常量字符串的。 它是编译到可执行文件中的NSString的实例,它不会在内存中消失。例子:
1、创建常量字符串。
NSString *astring = @"我是字符串";
2、NSString的内存地址
当我们声明一个字符串时,NSString *aString;
变量aString并不是真正包含一个字符串对象,它是指向内存中字符串对象的指针,我们称之为对象标识符,因为它是表示内存中的一个对象而不是保存这个对象,指针是一个内存位置的地址,下面考虑用“==”来比较字符串,来看个例子
      NSString *string1 = @"我是甲一号";
      NSString *string2 = @"我是甲一号";
      BOOL result = string1==string2;
      if(result){
            NSLog(@"address:%p", string1);
            NSLog(@"address:%p", string2);
      }
运行打印结果:
2012-07-30 09:36:41.337 objectiveC address:0x10485b478
2012-07-30 09:36:41.339 objectiveC address:0x10485b478
说明result的值是YES,这里对比的是内存地址,@"我是甲一号"存储在文字常量区,string1和string2都指向这个字符串,所以指向的是同一个地址。
如果这样做
NSString *string1 = @"我是甲一号";
NSString *string2 = string1;
BOOL result = string1==string2;
这时候result的值也YES了
看个例子就明白了。下面是字符串内存地址的例子
<div class="cnblogs_code">//内存指向    NSString *bstring = @"我是字符串";    NSString *astring = [ 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);
页: [1]
查看完整版本: Objective-C语法之字符串NSString