NSDictionary键值操作mutableCopy

 NSDictionary是开发中很常用的数据类型,当NSDictionary 已经创建好了,直接对某个key对应的value做修改而产生新的NSDictionary时,

需要做mutableCopy操作,不然所有的修改只会已最后一次修改作为参考,保留最后修改的值


例:information_group_names为初始化的array,例如包含 餐饮,财经,股票。。。。


NSDictionary  *temp =     @{NOMALKEY@"normal.png",              //初始化NSDictionary

                            HEIGHTKEY:@"helight.png",

                            TITLEKEY:@"头条",

                            TITLEWIDTH:[NSNumber numberWithFloat:60]

                            };

    NSMutableArray *vBtnItems = [[NSMutableArray allocinit];

    for (NSString *str in information_group_names) {

        [temp setObject:str forKey:TITLEKEY];                     //尝试改变标题

        [vBtnItems addObject:temp];

    }

以上这样做,最后得到的 vBtnItems数组里面包含的所有temp字典的TITLEKEY都是一样的值,为最后一次对TITLEKEY所赋的值,比如股票,就全部为股票了。。。。


改进:

  NSDictionary  *temp = @{NOMALKEY: @"normal.png",

                            HEIGHTKEY:@"helight.png",

                            TITLEKEY:@"头条",

                            TITLEWIDTH:[NSNumber numberWithFloat:60]

                            };

    NSMutableArray *vBtnItems = [[NSMutableArray alloc] init];

    NSMutableDictionary *vNewDic = [temp mutableCopy];           //装载

    for (NSString *str in information_group_names) {

        [vNewDic setObject:str forKey:TITLEKEY];

        NSDictionary *tempdict = [vNewDic copy];                 //copy对象而不是直接装存

        [vBtnItems addObject:tempdict];

    }


如此, vBtnItems里面的所有NSDictionary对象的TITLEKEY key对应的value就是不同的。


关于 mutableCopy和copy
1. mutableCopy 创建一个新的可变对象,并初始化为原对象的值,新对象的引用计数为 1;
2. copy 返回一个不可变对象。分两种情况:(1)若原对象是不可变对象,那么返回原对象,并将其引用计数加 1 ;(2)若原对象是可变对象,那么创建一个新的不可变对象 ,并初始化为原对象的值 ,新对象的引用计数为 1。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值