Cocoa Touch:View Controller的目的是什么?

时间:2014-01-21 21:55:52

标签: ios cocoa-touch uiviewcontroller

我对ViewControllers在iPhone(可可触摸)编程中的目的和作用感到困惑。我理解MVC(模型视图控制器)的一般概念,但Apple似乎已将specific meaning分配给ViewController,作为管理视图的控制器,并在视图和数据层之间进行交互。

实际上,我理解ViewController 做什么:它管理视图"。我所缺少的是"为什么"。我可以很好地管理视图,例如,在我的didFinishLaunchingWithOptions方法中创建一个主视图,而不使用ViewController:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];

    // Create the main view
    //
    const float width = self.window.frame.size.width;
    const float height = self.window.frame.size.height;

    CGRect rect = CGRectMake(0, 0, width, height);
    UIView* mainView = [[UIView alloc] initWithFrame: rect];
    [self.window addSubview: mainvView];

    // etc. etc...
}

那么ViewController的目的是什么?它如何使程序员的工作变得更容易?

3 个答案:

答案 0 :(得分:1)

从概念上讲,您的应用程序委托是一个视图控制器(我并不是指应用程序代表一般,我的意思是您的应用程序委托)。 从概念的角度来看,它不是从UIViewController继承的事实是无关紧要的。它的控制视图因此是一个视图控制器,它只是UIViewController的后代而不是所有。

现在假设您有5,10,100,500个视图可供显示和管理。你会怎样做? - 在您的应用程序委托中添加数百或数千个额外的代码行,直到您遇到大量代码?除了控制视图外,您还可以在其中添加所有其他模型代码。

如果你愿意,你可以,没有人也没有什么可以阻止你。

但是如果你想让你的代码更整洁,更容易管理,实现和维护,解耦,如果你想要利用操作系统提供的许多功能来帮助管理所有这些视图,那么你'开始使用UIViewControllers来管理这500个视图更简单,更安全,让您的生活变得简单。不是吗?

答案 1 :(得分:0)

它们提供了一个标准的,可预测的机制,具有明确定义的生命周期。从技术上讲,它们不是必需的。但是他们确实提供了帮助,因为他们是Apple推荐的处理MVC控制器部分的方法,他们有很多工具(Cocoa Touch,IB等)来帮助使用它。

答案 2 :(得分:0)

View Controller 不仅可以管理自己的 View ,还可以很好地与其他UIKit类集成。它有一个标题导航项工具栏项,在没有创建视图的情况下使用(其中这是一项昂贵的操作。)

View Controller 还允许您轻松使用 Interface Builder 创建 View ,同时仍然可以在NIB之前和之后实现某些逻辑加载。