ios - NSCoding 和 NSData 是什么关系?

标签 ios objective-c cocoa nsdata nscoding

我是 iOS 编程的新手,我刚刚学习了一些关于保存/加载对象的基础知识。在我的书中有一个将图像保存到文件的示例:

NSData *data = UIImageJPEGRepresentation(someImage, 0.5);
[data writeToFile:imagePath atomically:YES];

我的书还有一个将“essay”对象保存到文件的示例(“essay”对象有一个标题字符串和另一个作者字符串):

essay.m符合 <NSCoding>协议(protocol):

- (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;
}

essayStore.m :

[NSKeyedArchiver archiveRootObject:self.myEssay toFile:somePath];

我有三个问题:

  1. 我什么时候应该使用 NSData 将对象保存到一个/多个文件中,什么时候我应该符合 <NSCoding>将对象保存到文件的协议(protocol)?

  2. 什么时候应该将所有对象保存到一个文件中,什么时候应该为每个对象保存一个文件?

  3. 如果我的文章对象中有图片,我该如何将其与图片一起保存?

谢谢!

最佳答案

1. NSCoding 是一种协议(protocol),是将数据保存到文件的方法之一。优点是如果使用此方法,您可以按原样存储对象。
NSData,如 Apple class reference 中所述通常用于数据存储,在分布式对象应用程序中也很有用,其中数据对象中包含的数据可以在应用程序之间复制或移动。

2. 这取决于您保存数据的需要。通常将所有对象存储在一个文件中就足够了,这些通常是表示实体的对象。

3。您可以引用以下教程:
- list 项目 NSCoding Tutorial for iOS

编辑:

如果你想了解编码图像,看看这个 stackoverflow answer .
尽管编码图像不是我更喜欢的选项。正如@Anoop Vaidya 在评论中提到的那样,需要将复杂对象转换为原始数据。

是的,可以对您创建的类的对象进行编码。但是你必须在其中实现 NSCoding 协议(protocol)。以下链接是您要求的二级编码的恰当示例:

希望这对您有所帮助!

关于ios - NSCoding 和 NSData 是什么关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22678014/

相关文章:

ios - 为什么大多数 iOS 网络框架都有一个队列来管理请求?

IOS 自定义 Segue 和 ContainerView

cocoa - 使用 Core Image 渲染 RAW 照片时的黑色瓷砖

cocoa - 如何访问应用程序的共享NSTextView

ios - 如何为 iOS 自定义 GMSAutocompleteViewController?

ios - 如何使用 Facebook 获取用户的电子邮件?

ios - NSMutable 数组在退出函数后不保留数据

objective-c - 有没有办法显示不使用弱 self 的警告?

iphone - 用于 iPhone 开发的有用的第三方 Object-C GUI 插件

macos - Macintosh 文件是文具本吗?