黑马程序员技术交流社区

标题: Foundation中的NSMutableString问题 [打印本页]

作者: gamyc    时间: 2015-5-28 10:46
标题: Foundation中的NSMutableString问题
  1. //创建可变字符串
  2. NSMutableString *str = [NSMutableString string];
  3. //设定字符串的内容
  4. str.string = @"zhangsan";
  5. //创建对象
  6. Person *person = [Person new];
  7. //给person的实例变量赋值
  8. person.name = str;
  9. //修改字符串内容
  10. [str appendString:@"xxxx"];
  11. NSLog(@"name = %@",person.name);
  12. NSLog(@"str = %@",str);
复制代码



为什么运行结果是:
name = zhangsanxxxx
str = zhangsanxxxx

而不是:
name = zhangsan
str = zhangsanxxxx
作者: gamyc    时间: 2015-5-28 10:53
貌似定义 Person中 的name的时候是这样定义的:NSString *name;
这样就一改全改了。


作者: hui1107464497    时间: 2015-5-28 11:49
//给person的实例变量赋值
person.name = str;
这样就使得person.name  这个属性指向了str的内存地址,你改变str了,那么这个属性的值也会跟着变的
作者: yuang4074    时间: 2015-5-28 14:23
无论是person.name还是str,它俩都指向的一个字符对象。当person.name = str; 时表示它俩指向的是同一个字符对象。 [str appendString:@"xxxx"];//这句是通过str找到它指向的对象进行了修改。注意此时person.name也指向这个对象。哈哈,当通过person.namer找到它指向的对象,不也变了。




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