iOS开发常见Bug_不要被NSLog迷惑(NSDictionary的无序性)

271 篇文章 0 订阅
8 篇文章 0 订阅

今天被一个bug困扰了很久,最后发现根本原因是由于NSDictionary的无序性引起,为了加深印象,详细总结如下:

    NSDictionary *testDict = [TestUtil getLocalDataFromJsonFile];
    NSLog (@"testDict: %@", testDict);
    for (NSString *key in testDict) {
        NSLog (@"key: %@", key);
    }

其中jsonFile中json如下:

{
    "1": "1",
    "2": "2",
    "3": "3",
    "4": "4",
    "5": "5",
    "6": "6",
    "7": "7",
    "8": "8",
    "9": "9",
    "10": "10",
    "11": "11",
    "12": "12",
    "13": "13",
    "14": "14",
    "15": "15",
    "16": "16",
    "17": "17",
    "18": "18",
    "19": "19",
    "20": "20",
    "21": "21",
    "22": "22",
    "23": "23"
}

打印结果如下:

2014-08-06 23:01:34.749 PPTVSports[408:90b] testDict: {

    1 = 1;

    10 = 10;

    11 = 11;

    12 = 12;

    13 = 13;

    14 = 14;

    15 = 15;

    16 = 16;

    17 = 17;

    18 = 18;

    19 = 19;

    2 = 2;

    20 = 20;

    21 = 21;

    22 = 22;

    23 = 23;

    3 = 3;

    4 = 4;

    5 = 5;

    6 = 6;

    7 = 7;

    8 = 8;

    9 = 9;

}

2014-08-06 23:01:34.750 PPTVSports[408:90b] key: 18

2014-08-06 23:01:34.751 PPTVSports[408:90b] key: 10

2014-08-06 23:01:34.751 PPTVSports[408:90b] key: 19

2014-08-06 23:01:34.751 PPTVSports[408:90b] key: 11

2014-08-06 23:01:34.752 PPTVSports[408:90b] key: 12

2014-08-06 23:01:34.752 PPTVSports[408:90b] key: 1

2014-08-06 23:01:34.753 PPTVSports[408:90b] key: 20

2014-08-06 23:01:34.753 PPTVSports[408:90b] key: 2

2014-08-06 23:01:34.753 PPTVSports[408:90b] key: 13

2014-08-06 23:01:34.754 PPTVSports[408:90b] key: 3

2014-08-06 23:01:34.754 PPTVSports[408:90b] key: 21

2014-08-06 23:01:34.754 PPTVSports[408:90b] key: 14

2014-08-06 23:01:34.755 PPTVSports[408:90b] key: 4

2014-08-06 23:01:34.755 PPTVSports[408:90b] key: 5

2014-08-06 23:01:34.755 PPTVSports[408:90b] key: 15

2014-08-06 23:01:34.756 PPTVSports[408:90b] key: 22

2014-08-06 23:01:34.756 PPTVSports[408:90b] key: 6

2014-08-06 23:01:34.756 PPTVSports[408:90b] key: 23

2014-08-06 23:01:34.757 PPTVSports[408:90b] key: 7

2014-08-06 23:01:34.757 PPTVSports[408:90b] key: 16

2014-08-06 23:01:34.757 PPTVSports[408:90b] key: 8

2014-08-06 23:01:34.759 PPTVSports[408:90b] key: 17

2014-08-06 23:01:34.759 PPTVSports[408:90b] key: 9


通过上面的代码,你看到了什么?


NSDictionary的debugDescription方法得到的输出打印的顺序和原始的Json没有半毛钱关系,和枚举NSDictionary的allkeys的顺序也没有半毛钱关系。

NSDictionary具有无序性,所以切记千万不能依赖NSDictionary的输出误以为枚举NSDictionary的allkeys也会得到同样的顺序。

尼玛,理论不扎实,debug小半天啊,有木有~


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值