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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 愿我能 中级黑马   /  2014-4-23 11:20  /  3582 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

NSDictionary是不可变的那像这样 每次都为dict 附了新值
  1. NSDictionary *dict = [NSDictionary dictionaryWithObject:@"v" forKey:@"k"];
  2.     dict = [NSDictionary dictionaryWithObjectsAndKeys:
  3.             
  4.             @"v1",@"k1",
  5.              @"v2",@"k2",
  6.              @"v3",@"k3",nil];
  7.    // NSLog(@"%@",dict);
  8.     //打印结果k1 = v1;
  9.     //k2 = v2;
  10.     //k3 = v3;  上一句初始化的 v与k 却没了,如果没 第二句之后的 打印结果就是 k=v,想问下dict后面的赋值是不是就相当于前面初始化的v与k消失在了内存里,将指针指向了新的位置,同理 后面dict还可以继续赋值
  11.     NSArray *objects = [NSArray arrayWithObjects:@"v1",@"v2",@"v3",@"v4", nil];
  12.     NSArray *keys = [NSArray arrayWithObjects:@"k1",@"k2",@"k3",@"k4", nil];
  13.     dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
  14.    
  15.     NSLog(@"%@",dict);// 打印结果   k1 = v1;
  16.     k2 = v2;
  17.     k3 = v3;
  18.     k4 = v4;
复制代码
这样dict的内容有了三次变化,前两次的值是不是就废了

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

3 个回复

倒序浏览
NSDictionary就是不可变字典,你初始化之后 ,再次初始化,会出问题的
回复 使用道具 举报
本帖最后由 gmadong@163.com 于 2014-4-24 21:16 编辑
  1. 第一次
  2. dict  
  3. 指向的是堆中的 [NSDictionary dictionaryWithObject:@"v" forKey:@"k"];
  4. 第二次
  5. dict
  6. 指向的是堆中的 [NSDictionary dictionaryWithObjectsAndKeys:
  7.        @"v1",@"k1",
  8.              @"v2",@"k2",
  9.              @"v3",@"k3",nil];
  10. NSArray *objects = [NSArray arrayWithObjects:@"v1",@"v2",@"v3",@"v4", nil];
  11. NSArray *keys = [NSArray arrayWithObjects:@"k1",@"k2",@"k3",@"k4", nil];  
  12. 第三次  
  13. dict指向的是堆中的
  14. [NSDictionary dictionaryWithObjects:objects forKeys:keys];

  15. 每次都赋值只是改变了dict的指向
复制代码




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