【问题标题】:MVC, can model save/load its data?MVC,模型可以保存/加载其数据吗?
【发布时间】:2010-03-12 15:54:04
【问题描述】:

快速提问,我的数据模型是一个单例对象,它包含我要归档的名称列表。我的想法是让模型负责加载和保存它自己的数据。模型的load 方法将由ViewControllerviewDidLoad 方法调用,save 将由ViewControllerapplicationWillTerminate 调用。我可以直接在 ViewController 中进行加载/保存,但这会很混乱,因为名称列表是模型的实例变量。

加里

【问题讨论】:

    标签: iphone objective-c model-view-controller


    【解决方案1】:

    您可以在 init 和 dealloc 方法中加载和保存(尽管通常显式调用 save 方法)。将它封装在模型类中是个好主意。如果您从网络加载,您可能希望有一个单独的 loadData 方法或其他东西,而不是从 init 执行。

    【讨论】:

    • init 可能是个好主意,我没有考虑过。这也很有意义,因为现在我在那里分配了一些实例变量。当我实现加载(通过归档/NSCoding)时,如果找到保存文件,则需要加载,否则需要分配,因此将两者结合在一起会很有帮助。
    【解决方案2】:

    Apple 建议尽可能使用延迟初始化,因此我认为您正朝着正确的方向前进,尽管您可能需要考虑将方法名称设置为类似于属性访问器的名称,例如-names 而不是 -load(特别是因为有一个名为 +load 的类方法,这意味着完全不同的东西)。

    【讨论】:

    • 有很多以“load”开头的 UIKit 实例方法,所以我不同意这一点。由于这是(一个怀疑)在应用程序中广泛使用的单例,我认为立即加载数据是有意义的,但我同意一般来说,在必要时不要初始化字段是好的。在访问器中分别加载每个属性是否有意义取决于我认为的上下文。有时一次加载和初始化可能会更好,尤其是当您从网络加载对象的内容时。但在其他时候,这当然可能效率低下。
    • 我不认为我建议在较长的方法名称中使用“加载”作为前缀有任何特别的缺点。然而,由于+load 是在 NSObject 中声明的,因此被它的所有后代(几乎所有东西)继承,我会回避将实例方法命名为简单的旧 -load,但这只是我。跨度>
    • 我可能应该很清楚,我使用“加载”和“保存”只是为了指代相关的操作,而不是暗示我会将它们用作方法名称。鉴于我正在做的事情,它们最终可能会成为“loadCore”或“loadReactor”。
    • 我不小心阅读并同意 -load 本身不是一个好主意。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    • 2022-10-14
    • 2016-05-29
    • 2015-06-01
    • 1970-01-01
    相关资源
    最近更新 更多