要序列化自定义对象,您只需要符合NSCoding
协议。如果您的对象扩展了 NSObject,那么您需要做的(我相信)就是实现这些(以 person 对象为例):
// Encode an object for an archive
- (void)encodeWithCoder:(NSCoder *)coder
{
[super encodeWithCoder:coder];
[coder encodeObject:name forKey:@“Name”];
[coder encodeInteger:age forKey:@“Age”];
}
// Decode an object from an archive
- (id)initWithCoder:(NSCoder *)coder
{
self = [super initWithCoder:coder];
name = [[coder decodeObjectForKey:@“Name”] retain];
age = [coder decodeIntegerForKey:@“Age”];
}
NSArray
并且NSDictionary
已经实现了序列化方法。他们将序列化他们持有的所有对象(如果对象实现了 NSCoder 接口——如果他们扩展了 NSObject,他们就会这样做)。NSObjectencodeWithCoder
并且initWithCoder
默认情况下什么都不做,所以除非你在你的类中实现你自己的代码,否则什么都不会被序列化。
如果您有 NSArray 或 NSDictionary 对象,您可以使用以下方法同步它们:
// Writing
- (BOOL)writeToFile:(NSString *)aPath atomically:(BOOL)flag;
- (BOOL)writeToURL:(NSURL *)aURL atomically:(BOOL)flag;
// Reading
- (id)initWithContentsOfFile:(NSString *)aPath;
- (id)initWithContentsOfURL:(NSURL *)aURL;