码迷,mamicode.com
首页 > 其他好文 > 详细

NSMutableDictionary中的小坑与初始化方法详解

时间:2016-05-12 18:11:45      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:

      今天来讲NSMutableDictionary这个基础,是因为在今天的开发中遇到了一个小小的坑,当发现了这个问题后,着实觉得很不应该,所以在这里做一个记录,也同时同他人分享,少走我的弯路。本案例代码上传至 https://github.com/chenyufeng1991/InitNSMutableDictionary  。

      今天遇到的问题是这样的,某个方法返回两种结果,NSMutableDictionary或者nil,当然我是用NSMutableDictionary类型来接收返回值。当我要对这个返回值操作时,比如setValue插入数据的时候,发现键值对怎么都不能赋值,顿时让人很不爽。

      当然解决这个问题也是很简单的,问题就是无法对一个值为nil的NSMutableDictionary对象插入值,也就是setValue无效。下面我们看两种情况:

(1)当调试程序时,如果发现NSMutableDictionary对象的类型是(NSMutableDictionary*),并且值为nil的时候,是无法setValue的。

技术分享


(2)如果发现NSMutableDictionary对象类型是(_NSDictionaryM *)时,并且值为 0 key/value pairs时,才可以setValue插入。

技术分享


      注意可变字典没有类似add ,insert方法,插入数据的方法就是setValue。而且相同的“键”只会被插入一次。

       小小的坑作了说明以后,本文就来对NSMutableDictionary的初始化方法做一个较为全面的了解。需要注意的是,NSMutableDictionary的初始化方法主要分为两类,实例方法初始化和类方法初始化。两者基本上是一一对应的关系,也是类似的。


(1)

    /**(1)
     *  这样没有对可变字典进行初始化,也没有任何的意义。也无法使用setValue插入数据。也就是说值为nil的可变字典一般不用。
     在调试的时候可以看到,当可变字典类型为(NSMutableDictionary *)nil  时,无法使用setValue插入键值对。
     */
    NSMutableDictionary *dic = nil;

(2)

 /**(2)
     以上两种初始化方法一样。观察调试的时候可以发现,当可变字典为  (_NSDictionaryM *) 0 key/value pair ,零个键值对的时候可以setValue插入数据。
     */
    NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
    NSMutableDictionary *dic02 = [[NSMutableDictionary alloc] initWithCapacity:1];

(3)

    /**(3)
     这种初始化方法其实不推荐,这是隐式的使用 [value,key],[value,key]的方式来构造键值对。
     */
    NSMutableDictionary *dic = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"1",@"11",@"2",@"22",nil];

(4)

 /**(4)
     使用另一个可变字典来初始化某个字典。
     */
    NSMutableDictionary *dic2 = [[NSMutableDictionary alloc] init];
    NSMutableDictionary *dic = [[NSMutableDictionary alloc] initWithDictionary: dic2];

(5)

 /**(5)
     *  分别使用两个数组来初始化可变字典,一个数组是“键”数组,另一个数组是“值”数组。初始化后键值对会一一进行匹配。
     */
    NSArray *valueArray = @[@"value01",@"value02”,@“value03"];
    NSArray *keyArray = @[@"key01",@"key02",@"key03"];
    NSMutableDictionary *dic = [[NSMutableDictionary alloc] initWithObjects:valueArray forKeys:keyArray];


上面的是实例方法初始化,下面的是类方法初始化


(6)

  /**(6)
     *  直接使用类方法初始化。等同于上述(2)。
     */
    NSMutableDictionary *dic = [NSMutableDictionary dictionary];
    NSMutableDictionary *dic1 = [NSMutableDictionary dictionaryWithCapacity:1];

(7)

 /**(7)
     *  等同于上述(3)
     */
    NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"1",@"11",@"2",@"22",nil];

(8)

 /**(8)
     *  直接使用某个键值对初始化字典
     */
    NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithObject:@"1" forKey:@"11"];

(9)

 /**(9)
     等同于上述(4)
     */
    NSMutableDictionary *dic2 = [[NSMutableDictionary alloc] init];
    NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithDictionary:dic2];

(10)

 /**
     *  等同于上述(5)
     */
    NSArray *valueArray = @[@"value01",@"value02",@"value03"];
    NSArray *keyArray = @[@"key01",@"key02",@"key03"];
    NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithObjects:valueArray forKeys:keyArray];



NSMutableDictionary中的小坑与初始化方法详解

标签:

原文地址:http://blog.csdn.net/chenyufeng1991/article/details/51356937

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!