首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Iphone >

详解iPhone下怎么获取对象二

2013-07-08 
详解iPhone下如何获取对象二#import?NavSmallPhoneViewController.h ?@implementation?NavSmallPhoneApp

详解iPhone下如何获取对象二

  • #import?"NavSmallPhoneViewController.h" ?
  • @implementation?NavSmallPhoneAppDelegate??
  • @synthesize?window=_window; ?
  • @synthesize?viewController=_viewController; ?
  • @synthesize?info; ?
  • -?(BOOL)application:(UIApplication?*)application?didFinishLaunchingWithOptions:(NSDictionary?*)launchOptions{??????
  • ??????????//?Override?point?for?customization?after?application?launch.??????????
  • ??????????selfself.window.rootViewController?=?self.viewController;??????
  • ??????????[self.window?makeKeyAndVisible];?????????
  • ??????????//Todo?这部分代码是未测试和说明一个问题的:当前UIApplicationDelegate实现类中的window属性来源哪???????
  • ??????????UIWindow?*w?=?[UIApplication?sharedApplication].keyWindow;??????
  • ??????????NSLog(@"%@\n%@"?,w?,self.window);??????
  • ??????????if?(w?==?self.window)??????????
  • ??????????NSLog(@"AppDelegate?'window?is?UIApplication?current?keyWindow!");?????????
  • ??????????return?YES;} ?
  • ????????????
  • ??????????-?(void)dealloc{??????
  • ??????????[_window?release];??????
  • ??????????[_viewController?release];??????
  • ??????????[super?dealloc]; ?
  • ??} ?
  • @end?

    看头文件,你发现实现类,有了两个属性,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应该是当前视图的父对象

          文中涉及红色粗体,是本文的相关答案标记,如图:


          详解iPhone下怎么获取对象二
          ?

          UIView.window属性来源于当前UIApplication.keyWindow

          可以通过此属性让UIView间接获取到该视图的UIViewController类。

          小结:详解iPhone下如何获取对象教程的内容介绍完了,希望本文对你有所帮助!

  • 热点排行