UIKit引用说UIView是UIWindow的超类,但是尽管有这种从属关系,UIWindow实际上管理着UIViews。这对我来说太不寻常了。
有人知道这在软件设计方面的意义是什么吗?
非常感谢。
编辑:
我阅读了iPhone编程指南中的相关段落。然而,我不明白他们为什么要反其道而行之:让UIWindow成为UIView的父类。一定有什么东西迫使苹果以这种方式设计类层次结构。
发布于 2009-05-06 17:59:20
来自http://developer.apple.com/iPhone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/WindowsandViews/WindowsandViews.html
有经验的Mac开发人员可能会发现UIWindow类的一个不同寻常之处就是它的继承。在Mac中,NSWindow的父类是NSResponder。在iPhone OS中,UIWindow的父类是UIView。因此,在iPhone OS中,窗口也是视图对象。尽管窗口是父子关系,但在iPhone OS中处理窗口的方式通常与在Mac中处理窗口的方式相同。也就是说,通常不直接操作UIWindow对象的与视图相关的属性。
编辑:
UIView是通用的(提供用于创建所有类型的视图和访问其属性的通用方法。)而UIWindow更具体(类定义了管理和协调应用程序在屏幕上显示的窗口的对象)。
我知道这有点模糊,我想只有苹果才会知道这种等级制度的确切原因。
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对象中,处于子视图的嵌套层次结构中。视图层次中的父对象称为超级视图,子对象称为子视图。视图对象声明其封闭的superview的一个矩形区域,负责该区域内的所有绘图,并有资格接收在其中发生的事件。同级视图能够毫无问题地重叠,从而允许复杂的视图放置。
发布于 2011-03-17 20:52:10
因为那样每个UIView都将具有(继承的)属性和行为,而这些属性和行为只对windows有意义。这是错误的。
另一种方式更有意义:窗口将行为添加到视图之上。所以它可以绘制,有边界,包含其他视图,等等。但它扩展了这一点,例如,知道如何渲染到显示器。
在MacOS X中,NSWindows不是视图。它们包含一个名为contentView的“根视图”。iOS窗口是NSWindow +它的根视图的组合。
发布于 2017-05-24 13:53:30
包括主窗口的根视图在内的每个常规UIView都应该有一个父视图。UIWindow继承UIView来执行视图层次结构中父视图的职责。UIWindow不是常规视图,它有自己的UIView接口方法实现。
https://stackoverflow.com/questions/830785
复制相似问题