0

我已经看到了一些使用 NSCoder 归档应用程序中的内容的示例

@interface MyApplicationData : NSObject <NSCoding, NSCopying> {
    NSMutableArray* items;
    NSMutableArray* categories;
}

请看这个线程。如何使用 NSCoder

为什么这会提高您的应用程序的性能?这不是在您的应用程序中做更多的事情吗?谁能告诉我为什么以及何时要使用存档?

已编辑:引用一本书,iOS 5 编程突破极限-在存储缓存的方法下:“缓存或保存数据可以通过将其存储为数据模型的存档(使用 NSKeyedArchiver)或使用更高级别的数据库来完成像原始 SQLite 或使用像 Core Data 这样的对象序列化框架..." "....NSKeyedArchiver 是通过实现 NSCoding 协议来实现的。"

我认为 NSCoding 或 NSCoder 可以用于缓存,它会提高性能。那么将它用于缓存不是一个好习惯吗?

提前致谢。

4

3 回答 3

2

NSCoding与性能无关,它是一种序列化对象或对象图的技术,因此您可以将其保存到持久存储或通过网络发送。

于 2012-07-26T04:06:29.050 回答
1

为什么存档:

我正在做一个需要记住用户累积操作的项目。这些动作涉及在屏幕上移动许多自定义对象。自定义对象的属性包括当前位置、颜色、邻居等。所以这些对象被存储在一个数组中。所以 NSCoding 被用来序列化和归档数组。下次我需要调用用户的最后状态时,我只是从存档文件中读取。如果没有这种能力,我想我需要创建某种类型的带有表和字段的数据库来单独存储这些属性数据,并在需要重新创建用户的当前状态时执行相反的操作,如我的示例所示。

于 2012-07-26T04:50:35.000 回答
1

为什么这会提高您的应用程序的性能?

好吧,您需要一些上下文——序列化可能会也可能不会“提高性能”。它可以提高替代序列化表示的性能。这可能会有所不同,或者可能并不重要。

这不是在您的应用程序中做更多的事情吗?

好吧,如果你有一个在 xml/plist 中表示的复杂结构而不是序列化对象,那么不——知道如何编码/解码自身的对象可能比 xml 或 json 或其他一些中间表示(对于多种原因)。它还可以更容易管理,更容易表示复杂的结构(与中间序列化表示相比)。

谁能告诉我为什么以及何时要使用存档?

通常当您想要将对象或对象图的状态保存到磁盘或传输到另一台机器时。

假设您有文档数据,并且您希望在重新打开文档时恢复该文档——您的程序必须创建一个表示,以便稍后正确重建对象或对象图的状态。

于 2012-07-26T05:37:51.593 回答