`
kingbinchow
  • 浏览: 122946 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

    博客分类:
  • iOS
iOS 
阅读更多
创建三个类
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;
}


分配内存如图


  • 大小: 40.9 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics