什么时候在iPhone上使用encodeWithCoder:和initWithCoder:?

发布于 2024-07-18 15:13:39 字数 178 浏览 8 评论 0原文

正如我在上述主题中提出的问题所述,您通常必须满足哪些要求才能说“好吧,我需要 encodeWithCoder:initWithCoder: 实例化”? 通常,您可以将对象状态写入 NSUserDefaults,所以我很好奇你们专家什么时候决定使用其中一种?

As my question in the subject above states, what requirements do you typically have to meet in order to say "Ok, I need encodeWithCoder: and initWithCoder: instantiation for this"? Typically you can write object state to NSUserDefaults, so I'm curious when do you experts decide to use one vs the other?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

长不大的小祸害 2024-07-25 15:13:39

initWithCoder:由操作系统在解压缩 XIB 文件时使用; 如果您仔细观察,您会发现您在 XIB 中创建的视图不会调用 initWithFrame: ; 他们将调用 initWithCoder:

initWithCoder: is used by the OS when un-archiving XIB files; if you look closely, you'll see that initWithFrame: is not called for views you create in your XIB; they'll have initWithCoder: called instead.

锦欢 2024-07-25 15:13:39

用户默认值基本上是一个属性列表。 属性列表与 JSON 类似,只能存储特定类型的数据——NSString、NSNumber、NSData、NSDate、NSArray、NSDictionary。 如果您尝试在用户默认值中存储其他任何内容,则会出现异常。 属性列表也不能处理任意对象图,只能处理树。

您始终可以采用自定义状态并将其转换为属性列表兼容的数据结构,然后将其存储在用户默认值中; 但是你基本上是在实现一种对象序列化机制,你也可以使用 NSArchiver 已经提供的更强大的机制。

User defaults is, basically, a property list. Property lists are similar to JSON and can only store specific types of data -- NSString, NSNumber, NSData, NSDate, NSArray, NSDictionary. If you try to store anything else in a user default, you'll get an exception. Property lists also can't handle arbitrary object graphs, only trees.

You could always take your custom state and convert it into a property-list compatible data structure, then store it in user defaults; but then you're basically implementing an object serialization mechanism, and you might as well use the more powerful one that's already provided by NSArchiver.

你的他你的她 2024-07-25 15:13:39

NSCoder 是实现序列化的标准 Cocoa 方法。 有关详细信息,请参阅 Apple 的 Cocoa 存档和序列化编程指南

NSCoder is the standard Cocoa method of implementing serialization. See Apple's Archives and Serializations Programming Guide for Cocoa for details.

很酷又爱笑 2024-07-25 15:13:39

每当我需要存储某种复杂的数据而无需手动编辑时,我都会使用 NSCoder。 例如,我的应用 Converter 将从互联网下载的货币汇率存储在 NSCoder 存档中。 然而,这是它在这样的存档中保留的唯一内容:单位定义(只能​​手动更改)保存在应用程序包中的一系列 plist 文件中,并且最近选择的单位和值之类的内容保存在NSUserDefaults。

I go with NSCoder whenever I have some sort of complicated data to store that I never have to edit by hand. For example, my app Converter stores currency exchange rates downloaded from the Internet in an NSCoder archive. However, that's the only thing it keeps in such an archive: unit definitions, which are only ever altered by hand, are kept in a series of plist files in the application bundle, and things like the most recently selected units and values are kept in NSUserDefaults.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文