详解iPhone下如何获取对象二
看头文件,你发现实现类,有了两个属性,window和viewController;就是保存当前实现类所关联的window和视图控制器
通过运行,输出“AppDelegate 'window is UIApplication current keyWindow!”,说明实现类的window属性来源UIApplication实例当前的keyWindow属性。
也就是说,如果UIApplication实例只有一份UIWindow实例,那肯定和其UIApplicationDelegate实现类的window属性指向同一UIWindow实例。
之所以在UIApplicationDelegate实现类定义这么两个属性,就是为了更方便的使用UIWindow和UIViewController,作用就是建立对象树状关系,便于彼此调用和实现。
在这里,应该清楚了UIApplication和UIViewController之间是通过UIWinodw来关联的,尽管在UIApplicationDelegate实现类中定义一个viewController属性。修改下上面的关系图:
常规iPhone程序对象结构如下:
- 对象个数????????对象类型 ?
- ?
- 1?????????UIApplication ?
- 1????????????UIApplicationDelegate/subclass ?
- 1????????????UIWindow ?
- 1???????????.rootViewController属性 ?
- 1,N??????????UIViewController/subclass ?
- 1,N???????????UIView/subclsss?
根据现在的对象结构图,可以知道UIWindow实例在此仅仅是起承上启下的作用。
UIWindow继承UIView:UIResponder:NSObject
现在可以看下UIViewController
继承UIResponder:NSObject
UIViewController其子类UINavigationController和UITabBarController为复杂视图控制器和视图的层次结构提供额外的行为处理功能。
针对问题看下,有哪些视图控制器可访问?
- parentViewController??property ?
- searchDisplayController??property ?
- splitViewController??property ?
- modalViewController??property ?
- navigationController??property ?
- tabBarController??property?
上述控制器访问器都是只读,说明这些控制器是由内部或初始化就进行处理。
从这里来看,至少可以说明一点,Controller之间的关联是存在的
最关键,怎么去管理视图?
属性view和方法loadView
UIView又如何得到它的操作者?又如何管理自身的子视图?
继承于UIResponder:NSObject
如果UIView包含在UIViewController下,只能顺起获取到对应的UIView,暂时未知如何根据UIView获取UIViewController
UIView关于管理视图层次,如下:
Managing the View Hierarchy
- ??superview??property ?
- ??subviews??property ?
- ??window??property ?
- ?addSubview: ?
- ?bringSubviewToFront: ?
- ?sendSubviewToBack: ?
- ?removeFromSuperview ?
- ?insertSubview:atIndex: ?
- ?insertSubview:aboveSubview: ?
- ?insertSubview:belowSubview: ?
- ?exchangeSubviewAtIndex:withSubviewAtIndex: ?
- ?isDescendantOfView:?
感觉可以通过属性window来获取Controller,从某一个角度来说,这个Controller应该是当前视图的父对象
文中涉及红色粗体,是本文的相关答案标记,如图:
?UIView.window属性来源于当前UIApplication.keyWindow
可以通过此属性让UIView间接获取到该视图的UIViewController类。
小结:详解iPhone下如何获取对象教程的内容介绍完了,希望本文对你有所帮助!