利用 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

验证代码

打印结果

总结:

高端大气上档次,低调奢华有内涵,奔放洋气有深度,简约时尚国际范,低端粗俗甩节操,土憋矫情无下限,装模作样绿茶婊,外猛内柔女汉子,卖萌嘟嘴剪刀手,忧郁深沉无所谓,狂拽帅气吊炸天,冷艳高贵接地气,时尚亮丽小清新,可爱乡村非主流,贵族王朝杀马特,提莫团战必须死。

原文地址:https://www.cnblogs.com/YouXianMing/p/3665526.html