我试图了解这两者是如何联系的。每次你创建一个UIViewController它也自动带有自己的UIView?
这些来自Cocoa还是Objective-C?
答案 0 :(得分:4)
UIViewController是一个为管理UIViews而构建的Cocoa Touch类。它期望具有视图层次结构,但您不“自动”获取视图(这稍微不准确;请参阅下面的编辑)。通常,您将通过在视图控制器上调用initWithNibName来获取视图。
Interface Builder中有一些内置的魔法,它知道如果File的Owner是UIViewController(或子类),则有一个名为view的属性。就是这样。
链接视图控制器和视图后,视图控制器会为您完成相当多的工作:它注册为视图触摸事件的响应者,注册设备旋转通知(并自动处理它们,如果您愿意),帮助您处理动画的一些细节,并半自动处理低内存条件。
编辑:更正 - 如果您不调用initWithNibName或手动设置视图属性,则视图属性getter将在视图为nil时调用loadView。 loadView的默认实现将看你是否设置了nibBundle和nibName并尝试从那里加载视图(这就是为什么你 在大多数时候没有调用initWithNibName的原因),但是如果未设置这些属性,它将使用默认值实例化UIView对象。从技术上讲,是的,它会自动带有自己的UIView,但大部分时间都没有什么价值。
答案 1 :(得分:4)
UIViewController不会自动附带视图。您必须使用-loadView
方法制作视图。默认情况下,这会从您指定的nib文件加载视图。如果您不想使用nib,也可以覆盖此方法以创建自定义视图。
此外,创建UIViewController时不会立即创建视图。 UIViewController使用一种称为lazy-loading的技术来推迟创建视图,直到第一次实际访问视图。