gpt4 book ai didi

iphone - 模型- View - Controller 的好例子

转载 作者:行者123 更新时间:2023-12-03 20:09:53 24 4
gpt4 key购买 nike

我是 Objective-C 和 iPhone 的新手,我以为我已经掌握了它的窍门,直到在玩了很多应用程序之后,我遇到了一个关于 MVC、NIB 和 IB 的非常基本的问题。有没有任何真正清晰解释的示例来说明如何遵循这个框架,我可以回去看看?

@interface test1ViewController : UIViewController {

IBOutlet myView *myview;
IBOutlet myModel *mymodel;
}

View 和模型都通过 IBOutlet 链接,但实例化模型对象要么会终止应用程序,要么会生成一个不响应任何消息的对象。

我也不清楚在哪里进行最好的初始化。我目前通过 View Controller 中的 viewDidLoad 执行此操作。是否有标准方法可以做到这一点,并且模拟器实际上总是以相同的方式启动吗?应该使用 awakeFromNib 吗?如果我使用纯代码或 IB 有什么区别吗?如果我使用了 IB,它是否应该包含模型对象?

MVC 的想法对我来说很有意义,因为我可能有多个 View 和 View Controller ,它们都反馈到并共享一个公共(public)的中央数据模型。任何关于这个新手问题的引用或进展都将非常受欢迎!

最佳答案

我不会花太多时间担心 MVC 的“经典”定义。 iOS 也遵循它,但有很多令人困惑的术语。 (“ View Controller ”)

你说尝试使用模型会杀死你的应用程序。您保留 myModel 吗?您必须保留所有 IBOutlet。

Nib 是“冻干”物体的集合。当您装入 Nib 时,如果您愿意的话,其中的物体会“再水化”。这意味着它们会复活,所有属性都设置为卡住它们时的状态。所以你谈论“实例化”和“初始化”,但这不适用于IB。这些对象已经实例化并初始化。想象一下编译 Nib 会“暂停”对象。当您加载 Nib 时,对象将恢复执行卡住时所做的操作。他们将收到 awakeFromNib 消息,因此这是放置一些代码来检查应用程序状态的好地方,看看是否必须对对象进行一些操作才能使其加快速度。

viewDidLoad 看起来像是一个“初始化”方法,但不要被愚弄。它是 View Controller 生命周期的一部分,可以多次调用! (如果你的 Controller 的 View 作为低内存警告的一部分被清除,如果 View 必须......等待它......重新加载,则可能会再次调用 viewDidLoad 。)因此,将 View 设置内容放在 viewDidLoad 中是合适的,但不是其他初始化类型的东西。

对于“通用数据”,我喜欢创建一个单例数据模型类。您的各种 View 可以设置模型的属性,或发送通知。您还可以使用 KVO(键值观察)来观察模型的变化。

关于iphone - 模型- View - Controller 的好例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4318894/

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