A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Lin枫 中级黑马   /  2014-4-14 12:04  /  1176 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Lin枫 于 2014-4-15 08:36 编辑

这段代码有什么问题,如何修改

  • for (int i = 0; i < someLargeNumber; i++)
  • {
  • NSString *string = @”Abc”;
  • string = [string lowercaseString];
  • string = [string stringByAppendingString: @"xyz"];
  • NSLog(@“%@”, string);
  • }

评分

参与人数 1技术分 +1 收起 理由
黑妞~ + 1

查看全部评分

2 个回复

倒序浏览
问题在于NSString是不可变字符串,所以它的stringByAppendingString方法,和lowercaseString方法都需要用一个新创建的字符串接收。。
回复 使用道具 举报 0 1
本帖最后由 于清扬 于 2014-4-14 13:17 编辑
  1. // 这段代码本身没什么问题 运行的结果会打印someLargeNumber次abcxyz.
  2.     /**
  3.      NSString *string = @"Abc";是不可变的
  4.      string = [string lowercaseString];
  5.      string = [string stringByAppendingString: @"xyz"];
  6.      这2句代码每次都返回一个新的字符串对象,
  7.      只是改变的指针string的指向。
  8.      
  9.      重要:要分清,指针是指针,对象是对象,
  10.      oc中只是通过指针去操作对象。
  11.      在程序执行中,@"Abc"这个对象是没有发生变化的
  12.      只是指针string指向了不同对象而已
  13.      */
  14.     for (int i = 0; i < someLargeNumber; i++)
  15.     {
  16.         NSString *string = @"Abc";
  17.         string = [string lowercaseString];
  18.         string = [string stringByAppendingString: @"xyz"];
  19.         NSLog(@"%@",string);
  20.     }
  21. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黑妞~ + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马