Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c UIViewController和UIView之间的关系_Objective C_Cocoa Touch_Uikit - Fatal编程技术网

Objective c UIViewController和UIView之间的关系

Objective c UIViewController和UIView之间的关系,objective-c,cocoa-touch,uikit,Objective C,Cocoa Touch,Uikit,我想了解这两者是如何联系在一起的。每次制作UIViewController时,它是否也会自动附带自己的UIView 这些也是来自Cocoa或Objective-C的吗?UIViewController是一个为管理UIView而构建的Cocoa Touch类。它希望有一个视图层次结构,但您不会“自动”获得视图(这有点不准确;请参见下面的编辑)。通常,您将通过在视图控制器上调用initWithNibName来获取视图 Interface Builder中有一些内置的魔法,它知道如果文件的所有者是UI

我想了解这两者是如何联系在一起的。每次制作UIViewController时,它是否也会自动附带自己的UIView


这些也是来自Cocoa或Objective-C的吗?

UIViewController是一个为管理UIView而构建的Cocoa Touch类。它希望有一个视图层次结构,但您不会“自动”获得视图(这有点不准确;请参见下面的编辑)。通常,您将通过在视图控制器上调用initWithNibName来获取视图

Interface Builder中有一些内置的魔法,它知道如果文件的所有者是UIViewController(或子类),则有一个名为view的属性。就这样

链接视图控制器和视图后,视图控制器将为您完成大量工作:它注册为视图触摸事件的响应器,注册设备旋转通知(并自动处理,如果您愿意),帮助您处理动画的一些细节,并半自动处理内存不足的情况


编辑:更正如果不调用initWithNibName或手动设置view属性,则view属性getter将在view为nil时调用loadView。loadView的默认实现将查看您是否设置了nibBundle和nibName,并尝试从此处加载视图(这就是为什么大多数时候不必调用initWithNibName),但如果未设置这些属性,它将使用默认值实例化UIView对象。因此,从技术上讲,是的,它会自动附带自己的UIView,但大多数情况下,它没有什么价值。

UIViewController不会自动附带视图。您必须在
-loadView
方法中创建一个视图。默认情况下,这将从指定的nib文件加载视图。如果不希望使用nib,也可以重写此方法以生成自定义视图


此外,在创建UIViewController时,视图没有正确创建。UIViewController使用一种称为的技术来延迟视图的创建,直到第一次实际访问该视图。

当您说它应该管理视图时,即UIView、correct或它管理的其他类型的视图?是的,UIView和UIView子类。以及正确填充这些视图所需的任何其他数据,例如,在UIViewController中可能有一个NSFetchedResultsController来填充UITableView…不,UIViewController是Cocoa Touch类。Cocoa没有UIKit,因此它没有UIViewController。两者都不是:这些类来自Cocoa Touch。Cocoa没有UIKit,因此它没有这些类。