2012-07-26 55 views
0

我已经看到了一些使用NSCoder归档应用程序中的事情为什么存档?它如何提高性能?

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

请参阅该线程的例子。 How to use NSCoder

这为什么会提高应用程序的性能?是不是在你的应用程序中做更多的事情?任何人都可以告诉我为什么以及何时使用存档?

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

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

在此先感谢。

+3

使用'NSCoding'会以某种方式“提高性能”的概念从哪里来? – dasblinkenlight 2012-07-26 03:58:52

+0

,缓存或保存数据可以通过将数据存储为数据模型的存档(使用NSKeyedArchiver)来完成 – tipsywacky 2012-07-26 08:35:12

回答

1

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

好吧,你需要一些上下文 - 序列化可能会或可能不会“提高性能”。它可以提高性能而不是替代序列化表示。这可能会有所作为,或者它可能并不重要。

是不是在你的应用程序中做更多的事情?

好,如果你有XML/plist中表示,而不是一个序列化对象的复杂结构,则没有 - 它知道如何编码对象/解码本身可能是远比XML更好的性能或json或其他一些中间表示(出于多种原因)。它也可以更容易管理,并且更容易表示复杂的结构(与中间序列化表示相比)。

任何人都可以告诉我为什么以及何时使用存档?

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

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

2

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

+0

那么这是一个安全功能吗? – tipsywacky 2012-07-26 04:46:21

+1

“NSCoding”中的“编码”是指“编码”,与“加密”不同。它与安全无关。 – 2012-07-26 05:58:26

1

WhyA归档:

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

+0

因此,在归档属性后,即使您退出/终止程序,您仍然能够记住用户的最后状态?如果我猜对了,NSCoder是一个很好的选择,当涉及少量数据时,否则您可以使用Core Data。说到保存文件,你也会使用NSCoder,对吧? – tipsywacky 2012-07-26 05:17:22

+1

对第一个是的。不是第二个。你可能会误解我的答案。这里直接引用了Apple的文档:“这种功能为存档(在磁盘上存储对象和其他结构的地方)和分发(将对象复制到不同地址空间的地方)提供了基础。”这里是链接:https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Protocols/NSCoding_Protocol/Reference/Reference.html – user523234 2012-07-26 22:24:15