iOS开发常见Bug_不要被NSLog迷惑(NSDictionary的无序性)
2014-08-06 23:10
441 查看
今天被一个bug困扰了很久,最后发现根本原因是由于NSDictionary的无序性引起,为了加深印象,详细总结如下:
其中jsonFile中json如下:
打印结果如下:
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小半天啊,有木有~
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小半天啊,有木有~
相关文章推荐
- IOS开发之常见bug
- iOS开发常见bug
- ios开发常见bug
- iOS开发常见bug统计
- iOS 开发中常见的BUG
- IOS开发常见BUG和一些小技巧(PS:耐心看完,很实用)
- iOS开发常见bug
- ios开发常见bug
- iOS开发中常见错误修改指南
- iOS开发常见错误及其解决方法(长期更新)
- 常见的iOS手机应用开发流程
- 【Objective-C】iOS开发中常见的语句@synthesize obj=_obj的意义详解
- IOS开发基础之──NSLog 输出格式详解
- IOS开发NSArray,NSSet,NSDictionary,NSString操作总结
- ios开发工程师常见面试题汇总
- 【Objective-C】iOS开发中常见的语句@synthesize obj=_obj的意义详解
- 【Objective-C】iOS开发中常见的语句@synthesize obj=_obj的意义详解
- iOS开发常见问题若干
- html5在phonegap下开发iOS应用常见操作
- ios开发工程师常见面试题汇总