wz3*_*366 5 cocoa objective-c nscoding nsdata ios
我是 iOS 编程的新手,我刚刚学习了一些关于保存/加载对象的基础知识。在我的书中,有一个将图像保存到文件的示例:
NSData *data = UIImageJPEGRepresentation(someImage, 0.5);
[data writeToFile:imagePath atomically:YES];
Run Code Online (Sandbox Code Playgroud)
我的书还有一个将“essay”对象保存到文件的示例(“essay”对象有一个字符串作为标题,另一个字符串用于作者):
essay.m
符合<NSCoding>
协议:
- (void) encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.essayTitle forKey:@"essayTitle"];
[aCoder encodeObject:self.essayAuthor forKey:@"essayAuthor"];
}
- (instancetype) initWithCoder:(NSCoder *)aDecoder
{
self = [super init];
if (self) {
_essayTitle = [aDecoder decodeObjectForKey:@"essayTitle"];
_essayAuthor = [aDecoder decodeObjectForKey:@"essayAuthor"];
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
在essayStore.m
:
[NSKeyedArchiver archiveRootObject:self.myEssay toFile:somePath];
Run Code Online (Sandbox Code Playgroud)
我有三个问题:
什么时候应该使用 NSData 将对象保存到一个/多个文件,什么时候我应该遵守<NSCoding>
协议将对象保存到一个/多个文件?
什么时候应该将所有对象保存到一个文件中,什么时候应该为每个对象保存一个文件?
如果我的论文对象中有图像,我如何将其与图像一起保存?
谢谢!
1. NSCoding
是一种协议,是将数据保存到文件的方法之一。优点是如果使用此方法,您可以像这样存储对象。
NSData
,如Apple类参考中提到的是typically used for data storage and are also useful in Distributed Objects applications, where data contained in data objects can be copied or moved between applications.
2。这取决于你需要保存数据。通常将所有对象存储在一个文件中就足够了,这些对象通常代表一个实体。
3 . 您可以参考以下教程:
- List item NSCoding Tutorial for iOS
编辑:
如果您想了解有关图像编码的信息,请查看此stackoverflow 答案。
虽然编码图像不是我更喜欢的选择。正如 @Anoop Vaidya 在评论中提到的,复杂对象需要转换为原始数据。
是的,可以对您创建的类的对象进行编码。但你必须在其中实现 NSCoding 协议。以下链接是您所要求的二级编码的恰当示例:
希望这可以帮助!