黑马程序员技术交流社区

标题: NSString [打印本页]

作者: 1722413885    时间: 2014-4-18 19:20
标题: NSString
本帖最后由 1722413885 于 2014-4-20 22:24 编辑

NSString是不可变字符串,是不能改变的,
为什么下面的代码还能运行成功:

  1.    NSString *s = @"sdfsfsffe";
  2.         s = [s substringWithRange:NSMakeRange(2, 3)];
  3.         
  4.         NSLog(@"%@",s);
复制代码
输出结果:014-04-18 19:17:30.204  [1187:303] fsf
s的内容改变了?



作者: 罗冠坤    时间: 2014-4-18 19:47
s指针变量的这个地址的内容是不能变了,只能是aaaa
你这样的操作是把指针变量s指向的地址变了,所以内容变了
地址不变内容是不能变的,你可以分别输出s前后的地址就会发现区别

而MutableNSString就不同,地址不变内容也可以改变。
作者: 李烨    时间: 2014-4-18 21:15
  1. NSString *s = @"sdfsfsffe";
  2.     s = [s substringWithRange:NSMakeRange(2, 3)];//这是产生了一个新的字符串,指针s指向了他,这样原来的字符串@"sdfsfsffe"就没了,再也找不回,遮掩做很危险,容易丢失数据
  3.    
  4.     NSLog(@"%@",s);
复制代码

作者: 刘元明    时间: 2014-4-18 23:10
NSString *s = @"sdfsfsffe";  这句中的s是指针变量,[s substringWithRange:NSMakeRange(2, 3)]返回一个的字符串;s当然可以指向它。我们说NSString是不可变字符串,在这句中指的是指针s中存储了的那个地址的存储空间不可变,也就是*s不可以变。注意区分:int a[3] = {1,2,3}; a={2,3,4};这行代码是错误的,在这里a是数组名,也就是地址常量,a不可变
作者: 戴文婷    时间: 2014-4-19 00:00
  s = [s substringWithRange:NSMakeRange(2, 3)];
这个意思是说。
[s substringWithRange:NSMakeRange(2, 3)]
s 执行了  substringWithRange:NSMakeRange方法。从第二个字符,开始取3个字符。然后返回给s

s是指针,也就是s指向了另一个生成的字符串。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2