iOS 深入理解UINavigationController 和 UIViewController 之间的关系

创建三个类
BasicViewController : UIViewController 
SecondViewController : UIViewController
ThirdViewController : UIViewController
 
然后我们在BasicViewController .m文件中push一个viewController: 
SecondViewController *svc = [SecondViewController new]; 
[self.navigationController pushViewController:svc animated:true]; 
在SecondViewController.m文件中pop出viewController: 
[self.navigationController popViewControllerAnimated:true] 

问题就来了, 
push和pop是同一个viewController,那为什么用self.navigationController 就可以知道了 

其中在AppDelegate.m: 
 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.

BasicViewController *basicViewController = [BasicViewController new];//实例化内存后,_parentViewController-->nil
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:basicViewController];
// self.window.rootViewController = basicViewController.parentViewController; 
self.window.rootViewController = navigationController;

[self.window makeKeyAndVisible];
return YES;
}

 

等价于 
 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.

    BasicViewController  *basicViewController = [BasicViewController new];//实例化内存后,_parentViewController-->nil
    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:basicViewController];
    self.window.rootViewController = basicViewController.parentViewController; //不可以注释上一句,因为上一句是为_parentViewController实例化
    // self.window.rootViewController = navigationController;
    
    [self.window makeKeyAndVisible];
    return YES;
}
 
分配内存如图 
 
posted @ 2015-12-22 20:29  7菜  阅读(458)  评论(0)    收藏  举报