【转】不要使用SBJSON(json-framework)
原文网址:http://blog.devtang.com/2012/05/05/do-not-use-sbjson/
不知道为什么,在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"]; |
祝大家玩得开心。
原文网址:http://stackoverflow.com/questions/10681597/does-jsonkit-support-arc-or-is-there-a-fork-that-supports-arc
You can still use JSONKit in your application with ARC.
I'm using it myself.
Select your project root in XCode 5, under Targets
select your application then select the BuildPhases
tab. Under Compile Sources
double-click JSONKit.m and add the following compiler flags -fno-objc-arc
.
Hope it helps
Cheers
【转】不要使用SBJSON(json-framework)的更多相关文章
- Delphi Sysem.JSON 链式写法(转全能中间件)
链式写法有很多优点:连贯.语意集中.简洁.一气呵成.可读性强.比如要把 3.1415926 中的 59 提取为一个整数:Pi.ToString().Substring(5,2).ToInteger() ...
- C# Json.Net解析实例
本文以一个简单的小例子,简述Json.Net的相关知识,仅供学习分享使用,如有不足之处,还请指正. 概述 Json.Net is a Popular high-performance JSON fra ...
- Delphi Sysem.JSON 链式写法
链式写法有很多优点:连贯.语意集中.简洁.一气呵成.可读性强.比如要把 3.1415926 中的 59 提取为一个整数:Pi.ToString().Substring(5,2).ToInteger() ...
- DotNet 资源大全中文版(Awesome最新版)
Awesome系列的.Net资源整理.awesome-dotnet是由quozd发起和维护.内容包括:编译器.压缩.应用框架.应用模板.加密.数据库.反编译.IDE.日志.风格指南等. 算法与数据结构 ...
- A Complete List of .NET Open Source Developer Projects
http://scottge.net/2015/07/08/a-complete-list-of-net-open-source-developer-projects/?utm_source=tuic ...
- 【转】GitHub 排名前 100 的安卓、iOS项目简介
GitHub Android Libraries Top 100 简介 排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果, 然后过滤了跟 Android 不 ...
- GitHub iOS-Top 100 简介
GitHub排名前100的iOS第三方汇总简介,方便开发者选择适合的第三方框架. 项目名称 项目信息 1. AFNetworking 作者是 NSHipster 的博主, iOS 开发界的大神级人物, ...
- IOS一些高效的第三方框架库
MBProgressHUD ——进展指示符库 苹果的应用程序一般都会用一种优雅的,半透明的进度显示效果,不过这个API是不公开的,因此你要是用了,很可能被清除出AppStore.而 MBProgres ...
- GitHub 上排名前 100 的 Objective-C 项目简介
主要对当前 GitHub 排名前 100 的项目做一个简单的简介, 方便初学者快速了解到当前 Objective-C 在 GitHub 的情况. 项目名称 项目信息 1. AFNetworking ...
- 使用NuGet管理项目类库引用
NuGet 是微软开发平台(包括.NET平台)的一个包管理器,这里只介绍和.NET相关的NuGet Visual Studio扩展客户端, 在VS2010 ,VS2012 ,VS2013中默认集成了N ...
随机推荐
- Combotree--别样的构建层级json字符串
1.先看效果 2.需要使用层级json格式,如: 3.先不要着急怎么去实现它,先来想想怎么用对象来描述它 4.代码 protected void Page_Load(object sender, Ev ...
- ES6 学习小结1
ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015. 也就是说,ES6就是ES2015. ...
- JSON与List之间的转换
jsonString转换为list: JSONArray jsonArray=JSONArray.fromObject(result); List<RentCar> books=(List ...
- android黑科技系列——微信定位聊天记录中照片的位置信息插件开发详解
一.前言 最近关于微信中,朋友之间发送原图就可能暴露你的位置信息,其实这个问题不在于微信,微信是为了更好的体验效果,才有发送原图功能,而对于拍照,发送普通图片微信后台都会过滤图片的exif信息,这样就 ...
- 解决 C# webbrowser 弹出json下载问题
把以下内容保存为 .reg ,然后导入注册表,即可解决C# webbrowser 弹出json下载问题,也可通过程序修改. Windows Registry Editor Version 5.00 [ ...
- OpenCV向JNI层的参数转换
九层之台,起于累土:千里之堤毁于蚁穴:成者半于九十.最近工程项目完全可以调试,却最后在 OpenCV向JNI层的参数转换 这个节点上遇到麻烦,看来得好好的思考一番,仔细寻找其中的纰漏. 一.实例 根据 ...
- C#异步Async、Task、Await
参考http://www.cnblogs.com/jesse2013/p/async-and-await.html 事例: static void Main(string[] args) { ; i ...
- C#抽奖算法
摘自网络 static void Main(string[] args) { //各物品的概率保存在数组里 ]{ 0.5f, 0.5f, , }; //单次测试 //Console.WriteLine ...
- In Swift, typedef is called typealias:
It is used to create an alias name for another data type. The syntax of the typedef declaration is:[ ...
- spring boot注解
一.注解(annotations)列表 @SpringBootApplication:包含了@ComponentScan.@Configuration和@EnableAutoConfiguration ...