利用 FastCoding 将对象进行本地持久化

2024-09-05 13:48

本文主要是介绍利用 FastCoding 将对象进行本地持久化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

FastCoding

https://github.com/nicklockwood/FastCoding

A faster and more flexible binary file format replacement for NSCoding, Property Lists and JSON

一个用来替换 NSCoding , Property Lists 以及 JSON 方案的,快速灵活性强的二进制文件存储格式.

Purpose

FastCoder is a high-performance binary serialization format for Cocoa objects and object graphs. It is intended as a replacement for NSPropertyList, NSJSONSerializer, NSKeyedArchiver/Unarchiver and Core Data.

FastCoder 是一个高效的二进制序列化格式,用于存储 Cocoa 对象的.它被设计用来替换 NSPropertyList, NSJSONSerializer, NSKeyedArchiver/Unarchiver 以及 Core Data.

The design goals of the FastCoder library are to be fast, flexible and secure.

FastCoder 库的设计宗旨就是快,高灵活性以及安全.

FastCoder is already faster (on average) for reading than any of the built-in serialization mechanisms in Cocoa, and is faster for writing than any mechanism except for JSON (which doesn't support arbitrary object types). File size is smaller than NSKeyedArchiver, and comparable to the other methods.

FastCoder 在平均水平上读取快过任何 Cocoa 的内置的序列化方案,在写数据方面除了比 JSON (它不支持任意对象类型)慢以外,完爆其它内置的方案.而且,文件大小比 NSKeyedArchiver 小,使用方法却非常简单.

FastCoder supports more data types than either JSON or Plist coding (including NSURL, NSValue, NSSet and NSOrderedSet), and allows all supported object types to be used as the keys in a dictionary, not just strings.

FastCoder 支持的数据类型比 JSON 或者 Plist 编码(其包含了 NSURL, NSValue, NSSet 和 NSOrderedSet )更多的格式,它允许所支持格式的对象像使用键值对那样简单.

FastCoder can also serialize your custom classes automatically using property inspection. For cases where this doesn't work automatically, you can easily implement your own serialization using the FastCoding Protocol.

FastCoder 能够自动序列化你自定义的的类,通过检查你属性的方式.某些情况下无法自动工作时,你可以用 FastCoding 协议简单的实现你自己的序列化方案.

Supported OS & SDK Versions

  • Supported build target - iOS 7.0 / Mac OS 10.9 (Xcode 5.0, Apple LLVM compiler 5.0)
  • Earliest supported deployment target - iOS 5.0 / Mac OS 10.7
  • Earliest compatible deployment target - iOS 4.0 / Mac OS 10.6

NOTE: 'Supported' means that the library has been tested with this version. 'Compatible' means that the library should work on this OS version (i.e. it doesn't rely on any unavailable SDK features) but is no longer being tested for compatibility and may require tweaking or bug fixes to run correctly.

注意:'支持'意味着这个库在那个版本上测试过.'兼容'意味着这个库可以在那个OS版本上工作(i.e. 它不依赖于任何被弃用的 SDK 特性),但是,后续出现bug不再被维护.

ARC Compatibility

FastCoder is compatible with both ARC and non-ARC compile targets, however performance is better when running with ARC disabled, and it is recommended that you apply the -fno-objc-arc compiler flag to the FastCoder.m class. To do this, go to the Build Phases tab in your target settings, open the Compile Sources group, double-click FastCoder.m in the list and type -fno-objc-arc into the popover.

FastCoder 支持 ARC 以及 MRC 编译.在 MRC 下表现得好些.我建议你对 FastCoder.m 文件使用 -fno-objc-arc 编译标签.

Thread Safety

It is safe to call the FastCoder encoding and decoding method concurrently from multiple threads. It should be safe to encode the same object concurrently on multiple threads provided that you do not mutate the object while it is being encoded.

在不同的线程里并发的调用编码和解码的方法是安全的.

 

The chunk types supported by FastCoding are:

FCTypeNull                  an NSNull value
FCTypeAlias                 an alias to an previously encoded chunk in the file
FCTypeString                an NSString instance
FCTypeDictionary            an NSDictionary instance
FCTypeArray                 an NSArray instance
FCTypeSet                   an NSSet instance
FCTypeOrderedSet            an NSOrderedSet instance
FCTypeTrue                  a boolean YES value
FCTypeFalse                 a boolean NO value
FCTypeInt32                 a 32-bit integer value
FCTypeInt64                 a 64-bit integer value
FCTypeFloat32               a 32-bit floating point value
FCTypeFloat64               a 64-bit floating point value
FCTypeData                  an NSData instance
FCTypeDate                  an NSDate instance
FCTypeMutableString         an NSMutableString instance
FCTypeMutableDictionary     an NSMutableDictionary instance
FCTypeMutableArray          an NSMutableArray instance
FCTypeMutableSet            an NSMutableSet instance
FCTypeMutableOrderedSet     an NSMutableOrderedSet instance
FCTypeMutableData           an NSMutableData instance
FCTypeClassDefinition       a class definition (this is a private, internal object type used for object encoding)
FCTypeObject                an arbitrary object, encoded using the FastCoding protocol
FCTypeNil                   a nil value (not the same as NSNull), used for nil object properties
FCTypeURL                   an NSURL value
FCTypePoint                 an NSPoint/CGPoint value
FCTypeSize                  an NSSize/CGSize value
FCTypeRect                  an NSRect/CGRect value
FCTypeRange                 an NSRange value
FCTypeAffineTransform       a CGAffineTransform value
FCType3DTransform           a CATransform3D value

 

附上本人的测试心得:

先打上标签

在定义一个Model,包括了字典,数组,NSDate以及NSString,还有NSInteger.

写如下代码测试

查看打印信息

完美!

 

再测试个高级的,新建 SonModel 继承至 Model

验证代码

打印结果

 

这篇关于利用 FastCoding 将对象进行本地持久化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

JavaScript对象转数组的三种方法实现

《JavaScript对象转数组的三种方法实现》本文介绍了在JavaScript中将对象转换为数组的三种实用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录方法1:使用Object.keys()和Array.map()方法2:使用Object.entr

使用MapStruct实现Java对象映射的示例代码

《使用MapStruct实现Java对象映射的示例代码》本文主要介绍了使用MapStruct实现Java对象映射的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、什么是 MapStruct?二、实战演练:三步集成 MapStruct第一步:添加 Mave

Python进行word模板内容替换的实现示例

《Python进行word模板内容替换的实现示例》本文介绍了使用Python自动化处理Word模板文档的常用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录技术背景与需求场景核心工具库介绍1.获取你的word模板内容2.正常文本内容的替换3.表格内容的

Java中实现对象的拷贝案例讲解

《Java中实现对象的拷贝案例讲解》Java对象拷贝分为浅拷贝(复制值及引用地址)和深拷贝(递归复制所有引用对象),常用方法包括Object.clone()、序列化及JSON转换,需处理循环引用问题,... 目录对象的拷贝简介浅拷贝和深拷贝浅拷贝深拷贝深拷贝和循环引用总结对象的拷贝简介对象的拷贝,把一个

Git进行版本控制的实战指南

《Git进行版本控制的实战指南》Git是一种分布式版本控制系统,广泛应用于软件开发中,它可以记录和管理项目的历史修改,并支持多人协作开发,通过Git,开发者可以轻松地跟踪代码变更、合并分支、回退版本等... 目录一、Git核心概念解析二、环境搭建与配置1. 安装Git(Windows示例)2. 基础配置(必

Git打标签从本地创建到远端推送的详细流程

《Git打标签从本地创建到远端推送的详细流程》在软件开发中,Git标签(Tag)是为发布版本、标记里程碑量身定制的“快照锚点”,它能永久记录项目历史中的关键节点,然而,仅创建本地标签往往不够,如何将其... 目录一、标签的两种“形态”二、本地创建与查看1. 打附注标http://www.chinasem.cn

使用Spring Cache本地缓存示例代码

《使用SpringCache本地缓存示例代码》缓存是提高应用程序性能的重要手段,通过将频繁访问的数据存储在内存中,可以减少数据库访问次数,从而加速数据读取,:本文主要介绍使用SpringCac... 目录一、Spring Cache简介核心特点:二、基础配置1. 添加依赖2. 启用缓存3. 缓存配置方案方案

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

使用Java读取本地文件并转换为MultipartFile对象的方法

《使用Java读取本地文件并转换为MultipartFile对象的方法》在许多JavaWeb应用中,我们经常会遇到将本地文件上传至服务器或其他系统的需求,在这种场景下,MultipartFile对象非... 目录1. 基本需求2. 自定义 MultipartFile 类3. 实现代码4. 代码解析5. 自定