標籤:
不要使用SBJSON(json-framework)
文章目錄
不知道為什麼,在iOS開發中,有很多人使用 SBJSON (又被稱作json-framework)來做JSON解析庫。我想這是因為SBJSON是最早在iOS上出現的JSON解析庫。但是隨著iOS開發的流行,越來越多優秀的JSON解析庫也湧現出來, SBJSON和它們相比,效能上有很大的差距。
現在iOS行業內主要流行的JSON解析庫有:
NSJSONSerialization、
Apple JSON、
TouchJSON、
SBJSON、
YAJL、
JSONKit
行業內許多同行都對這些庫進行過benchmark測試。我在網上搜到的測試文章包括:
- https://github.com/samsoffes/json-benchmarks
- http://blog.csdn.net/arthurchenjs/article/details/7009995
- http://blog.csdn.net/ccat/article/details/7207871
- http://omegadelta.net/2011/11/04/json-framework-now-sbjson-is-evil/
- http://stackoverflow.com/questions/2256625/comparison-of-json-parser-for-objective-c-json-framework-yajl-touchjson-etc
是我從ArthurChenJS的部落格文章中截取的一張benchmark測試結果圖(橫條越短,解析速度越快):
從這些文章中可以看到,SBJSON在多數測試中都處於倒數的第一或倒數第二的位置。所以說,SBJSON實際上在效能這一點上講,確實是非常“SB”的,實在不值得大家留念。趕快把你的JSON解析庫換成其它的吧!
那麼應該換成哪個呢?
如果你的app只支援iOS 5.0以上系統,那麼直接用蘋果官方提供的JSON庫:NSJSONSerialization
庫即可。
如果你的app要支援iOS 5.0以下的系統,那麼我個人推薦JSONKit,不過JSONKit本身做了很多記憶體上的最佳化,所以不支援ARC,你在使用時可以對其加上 -fno-objc-arc 的編譯標誌即可,設定這個編譯標誌的詳細步驟可以見這篇文章。
JSONKit的使用也非常方便,在使用上只需要把SBJSON的JSONValue方法換成objectFromJSONData,JSONRepresentation方法換成JSONString即可。附上一段使用樣本:
#import "JSONKit.h"
NSString *path = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"json"]; NSData *content = [NSData dataWithContentsOfFile:path]; NSDictionary *kitData = [content objectFromJSONData]; NSString *kitString = [kitData JSONString];
|
祝大家玩得開心。
不要使用SBJSON(json-framework)