AppDelegate文件在哪里适合MVC?
我正在学习iPhone / iPad编程。 我相信我理解MVC的概念; 我很难理解如何在正常的iPhone / iPad应用程序中的一些文件适合MVC。
当您使用“基于视图的应用程序”模板创build新的应用程序时,会创build一个AppDelegate.m和AppDelegate.h文件。
这是一个模型,视图或控制器文件? 我猜这实际上没有那些。 我希望我能看到一个图表或stream程图,显示应用程序中每个文件所属的类别。
不是每个文件都适合一个特定的类别,但是,在这种情况下,我不得不说,AppDelegate是一个控制器,它不是可视化地呈现数据(视图),也不代表实际的数据(模型)确定什么视图控制器显示等,并在应用程序的开始pipe理其他视图(状态栏等)。
我不会太担心试图将每个文件分类到MVC,有些只是完全不适合。
应用程序委托是一个控制器对象。 默认情况下,它是iOS应用程序中主窗口(这是一个视图)的所有者和控制器。 应用程序委托从表示(或build模)应用程序本身( UIApplication
一个实例)的对象接收消息。 它在作为应用程序和系统之间的联系点的应用程序对象与应用程序的显示之间起中介作用。
我将AppDelegate视为一个控制器,因为这种代码
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. self.window.rootViewController = self.viewController; [self.window makeKeyAndVisible]; [application setStatusBarHidden:YES withAnimation:NO]; return YES; }
AppDelegate是在模型和视图之间build立链接的地方。
在AppDelegate中,您可以放置特定于您的应用程序的代码。
视图和模型应该能够在其他应用程序(如UIView类)中生存,因为它们不是特定于应用程序的。
这在Mac桌面应用程序中更为明显,在该代理程序中还有更多的工作要做。
这是一个古老的问题,但今天我只是问自己同样的问题。 我认为AppDelegate类不能仅仅被分类为Controller 。 它确实控制窗口,并build立其根控制器,因此它可以被分类为视图控制器(注:UIWindow从UIViewinheritance)。 但是它也执行更多模型相关的任务,比如应用程序终止时的数据持久性。 所以它可以被认为是一个模型控制器或者涉及到数据访问层。
它也负责处理URL的打开。 这可能导致View的改变,但也肯定会需要模型相关的任务,如parsing,持久化,更新,authentication等。如果视图/模型绑定通过KVO只是更新模型可能会导致所需的视图更新。 我觉得这将是一个更好的设置。 另外,默认情况下,所有的核心数据堆栈都被添加到AppDelegate中,这使得它不再仅仅与View相关。
它认为它负责处理应用程序的事实导致它有多个目的。 也许这就是为什么开发人员最终会抛弃任何东西在这里。 它是根控制器,应用程序服务层和应用程序模型pipe理器意义上的应用程序pipe理器。
由于AppDelegate是应用程序(对于开发人员)的入口点,所以根据应用程序讨论它是有道理的。 应用程序正在终止,应用程序正在进入后台等。我们正在讨论作为模型实体的应用程序。