https://github.com/nicklockwood/FastCoding
A faster and more flexible binary file format replacement for NSCoding, Property Lists and JSON
一个用来替换 NSCoding , Property Lists 以及 JSON 方案的,快速灵活性强的二进制文件存储格式.
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 协议简单的实现你自己的序列化方案.
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不再被维护.
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 编译标签.
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
验证代码
打印结果