[Trans] Do not use SBJson

2023-11-23 03:32
文章标签 use trans sbjson

本文主要是介绍[Trans] 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即可。附上一段使用示例:

1
2
3
4
5
6
#import "JSONKit.h"
NSString *path = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"json"];
NSData *content = [NSData dataWithContentsOfFile:path];
NSDictionary *kitData = [content objectFromJSONData];
NSString *kitString = [kitData JSONString];

祝大家玩得开心。

这篇关于[Trans] Do not use SBJson的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/415046

相关文章

Tomcat启动报错:transport error 202: bind failed: Address already in use

Tomcat启动报错:transport error 202: bind failed: Address already in use 了,上网查找了下面这篇文章。也是一种解决办法。 下文来自:http://blog.csdn.net/sam031503/article/details/7037033 tomcat 启动日志报出以下错误:  ERROR: transport err

Unity Adressables 使用说明(五)在运行时使用 Addressables(Use Addressables at Runtime)

一旦你将 Addressable assets 组织到 groups 并构建到 AssetBundles 中,就需要在运行时加载、实例化和释放它们。 Addressables 使用引用计数系统来确保 assets 只在需要时保留在内存中。 Addressables 初始化 Addressables 系统在运行时第一次加载 Addressable 或进行其他 Addressable API 调

torch.backends.cudnn.benchmark和torch.use_deterministic_algorithms总结学习记录

经常使用PyTorch框架的应该对于torch.backends.cudnn.benchmark和torch.use_deterministic_algorithms这两个语句并不陌生,在以往开发项目的时候可能专门化花时间去了解过,也可能只是浅尝辄止简单有关注过,正好今天再次遇到了就想着总结梳理一下。 torch.backends.cudnn.benchmark 是 PyTorch 中的一个设置

编译时出现错误 -- clang: error: linker command failed with exit code 1 (use -v to see invocation)

出现这个错误的原因有多种,常见的是因为某些文件的缺失或者是文件的重复导致的。 这类错误查看的关键在于其上一行的文字。 对于文件缺少而导致错误的情况: 例如上图中的示例,其上一行文字为 ld:library not found for -lrxl,可以看出是缺失了某一文件而导致的错误,这行文字中的最后“ -lrxl ”:-l 代表着其前缀是“lib”,连着后面的 rxl,其名称为 libr

Address localhost:1099 is already in use:tomcat频繁重启端口占用问题

错误提示 Unable to open debugger port (127.0.0.1:58198): java.net.SocketException "Socket closed" Address localhost:1099 is already in use 端口被占用 报错原因 由于短时间内频繁运行tomcat服务器。 为了避免出现这一错误。可以点击刷新uodate

关于GDB运行时No symbol table is loaded. Use the “file“ command.的解决方法

最近有同学问GDB使用的问题,对此做一个整理。 首先,GDB已经报错file找不到了,那可以运行file test检测一下 (gdb) file testReading symbols from test...(no debugging symbols found)...done. 发现找不到可执行文件,所以问题应该在于编译时候没有加上ggdb3,重新编译一下 ty@ubuntu:

react的use函数可搭配Suspense与lazy

use 是一个用于解析 React v18 及以下版本的 promise 状态的 polyfill hook。请注意,它只实现了消费 promise 的能力。 参考资料 https://www.reactuse.com/zh-Hans/state/usehttps://zh-hans.react.dev/reference/react/use#dealing-with-rejected-pro

WHAT - 通过 react-use 源码学习 React(Animations 篇)

目录 一、官方介绍1. Sensors2. UI3. Animations4. Side-Effects5. Lifecycles6. State7. Miscellaneous 二、源码学习Animations - useRaf业务场景2. 游戏开发3. 数据可视化4. UI 组件5. 时间驱动的 UI 效果实现示例 一、官方介绍 Github 地址 react-use

android NDK开发中,用Cygwin调试本地代码时报错“Another debug session running,Use --force to kill it”原因及解决办法

在使用ndk-gdb调试的时候,执行$NDK/ndk-gdb --verbose报错“Another debug session running,Use --force to kill it”。      我查了NDK官方文档,是这样说的:        --force: By default, ndk-gdb aborts if it finds that another nati

WHAT - 通过 react-use 源码学习 React(Side-effects 篇)

目录 一、官方介绍1. Sensors2. UI3. Animations4. Side-Effects5. Lifecycles6. State7. Miscellaneous 二、源码学习示例:n. xx - yySide-effects - useAsync, useAsyncFn, and useAsyncRetryuseAsyncuseAsyncFnuseAsyncRetry