为什么UIWindow是一个孩子,也是UView的父母?

时间:2009-05-06 17:31:54

标签: iphone uiview software-design uiwindow

UIKit参考说UIView是UIWindow的超类,但是尽管有这种父母,UIWindow实际上管理着UIViews。这听起来很不寻常。

有谁知道软件设计方面的重要性是什么?

非常感谢。

编辑:
我阅读了iPhone编程指南中的相关段落。然而我无法理解他们为什么会这样做:让UIWindow成为UIView的父母。肯定有一些事情迫使Apple以这种方式设计类层次结构。

3 个答案:

答案 0 :(得分:5)

来自http://developer.apple.com/iPhone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/WindowsandViews/WindowsandViews.html

  

有经验的Mac OS X开发人员可能会发现有关UIWindow类的不寻常之处在于它的继承。在Mac OS X中,NSWindow的父类是NSResponder。在iPhone OS中,UIWindow的父类是UIView。因此,在iPhone OS中,窗口也是视图对象。尽管它具有亲子关系,但您通常会将iPhone OS中的窗口视为与Mac OS X中的窗口相同。也就是说,您通常不会直接操纵UIWindow对象的视图相关属性。

编辑:

UIView是通用的(提供用于创建所有类型的视图并访问其属性的常用方法。)而UIWindow更具体(类定义管理和协调应用程序在屏幕上显示的窗口的对象。)< / p>

我知道有点模糊,我认为只有苹果会知道这种等级制度的确切原因。

http://developer.apple.com/iPhone/library/documentation/UIKit/Reference/UIWindow_Class/UIWindowClassReference/UIWindowClassReference.html#//apple_ref/occ/cl/UIWindow

  

UIWindow类定义管理和协调应用程序在屏幕上显示的窗口的对象(称为窗口)。窗口的两个主要功能是提供一个区域,用于显示其视图并将事件分发给视图。

http://developer.apple.com/iPhone/library/documentation/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/cl/UIView

  

UIView类提供了用于创建所有类型的视图并访问其属性的常用方法。例如,除非子类具有自己的指定初始值设定项,否则使用initWithFrame:方法创建视图。 frame属性指定superview坐标中视图的原点和大小。所有视图的坐标系原点都在左上角。

     

UIView对象排列在UIWindow对象中,位于子视图的嵌套层次结构中。视图层次结构中的父对象称为超级视图,子级称为子视图。视图对象声称其封闭的超视图的矩形区域,负责该区域内的所有绘图,并且还有资格接收其中发生的事件。同级视图可以重叠而不会出现任何问题,从而允许复杂的视图放置。

答案 1 :(得分:0)

因为那时每个UIView都有(继承的)属性和行为只对windows有意义。那是错的。

另一种方式更有意义:窗口在视图之上添加行为。所以它可以绘制,包含边界,包含其他视图等。但它扩展了这一点,例如,知道如何渲染到显示器。

在MacOS X中,NSWindows不是观点。它们包含一个“根视图”,称为contentView。 iOS窗口是NSWindow及其根视图的组合。

答案 2 :(得分:0)

每个常规UIView(包括主窗口的根视图)都应具有父视图。 UIWindow继承UIView以在视图层次结构中执行父视图的职责。 UIWindow不是常规视图,并且有自己的UIView接口方法实现。