您的位置:首页 > 移动开发 > IOS开发

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

2014-08-06 23:10 441 查看
今天被一个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小半天啊,有木有~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: