gpt4 book ai didi

ios - NSCoding 和 NSData 是什么关系?

转载 作者:可可西里 更新时间:2023-11-01 06:08:09 26 4
gpt4 key购买 nike

我是 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com