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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 2014571245 中级黑马   /  2014-5-8 19:36  /  1730 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 2014571245 于 2014-5-9 11:02 编辑
  1. #import <Foundation/Foundation.h>

  2. int main(int argc, const char * argv[])
  3. {
  4.     NSMutableString *new1 = [NSString stringWithFormat:@"12 , 34"];
  5.     NSMutableString *new2 = [new1 copy];
  6.     NSRange *rang = [new2 rangeOfString:@"34"];
  7.     NSMutableString *new = [new2 deleteCharactersInRange:rang];
  8.    
  9.     NSLog(@"%@",new);
  10.     return 0;
  11. }
复制代码


根据MJ老师的讲解,自己写的代码,试图将不可变数组内容拷贝一份到可变数组中,再对该数组进行删除操作,可是报错了,想问问这段代码合理吗?不合理的话应该怎么改?

评分

参与人数 1技术分 +1 收起 理由
脸皮猴 + 1 淡定

查看全部评分

9 个回复

倒序浏览
本帖最后由 兰闻天 于 2014-5-8 23:23 编辑

  1. #import <Foundation/Foundation.h>

  2. int main(int argc, const char * argv[])
  3. {
  4.     NSMutableString *new1 = [NSString stringWithFormat: @"12 , 34"]; // 这个最好前边的也是NSString
  5.     NSMutableString *new2 = [new1 copy];  // 这里不对,对不可变数组执行copy是浅复制,应该换成[new1 mutableCopy],然后你再试试
  6.     NSRange rang = [new2 rangeOfString: @ "34"];
  7.     NSMutableString *new = [new2 deleteCharactersInRange:rang];

  8.     NSLog(@"%@",new);
  9.     return 0;
  10. }
复制代码
回复 使用道具 举报
本帖最后由 Er01c 于 2014-5-8 21:51 编辑
  1.         // 只有一种情况是浅拷贝:不可变对象调用copy方法时
  2.         // 浅拷贝:指针拷贝,不会产生新的对象。源对象计数器+1。
  3.         NSString *string = [NSString stringWithFormat:@"12 , 34"];
  4.         // copy产生的是不可变副本,由于源对象本身就不可变,所以为了性能着想,copy会直接返回源对象本身
  5.         // 源对象计数器会+1
  6.         // 在浅拷贝情况下,copy其实就相当于retain
  7.         NSString *str = [string copy];
复制代码

回复 使用道具 举报
NSRange *rang!!!??? NSRange是结构体啊!!!你是不是搞错了
回复 使用道具 举报
这有什么错吗????
NSRange *rang = [new2 rangeOfString: @"34"];//这是为了的出字符34的位置和长度。

回复 使用道具 举报
Jine 发表于 2014-5-8 23:03
这有什么错吗????
NSRange *rang = [new2 rangeOfString: @"34"];//这是为了的出字符34的位置和长度。
...

NSRange rang 这个没有*
回复 使用道具 举报
Jine 发表于 2014-5-8 23:03
这有什么错吗????
NSRange *rang = [new2 rangeOfString: @"34"];//这是为了的出字符34的位置和长度。
...

的确有错  应该是
  1. NSRange rang = [new2 rangeOfString:@"34"];
复制代码

哎  太大意了   我不应该加*
回复 使用道具 举报
Jine 中级黑马 2014-5-9 00:15:33
8#
………………我晕:funk:躲墙角反省!
回复 使用道具 举报
Jine 发表于 2014-5-9 00:15
………………我晕躲墙角反省!

面壁完了请我香蕉。哈哈。。{:3_47:}{:3_53:},注意,不是NS开头的都是类,
回复 使用道具 举报
学习了,刚好我也碰到这个问题
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马