创建三个类 

C++代码  iOS 深入理解UINavigationController 和 UIViewController 之间的关系
  1. BasicViewController : UIViewController   
  2. SecondViewController : UIViewController   
  3. 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: 

C++代码  iOS 深入理解UINavigationController 和 UIViewController 之间的关系
  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  
  2. {  
  3.     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];  
  4.     // Override point for customization after application launch.  
  5.   
  6.     BasicViewController  *basicViewController = [BasicViewController new];//实例化内存后,_parentViewController-->nil  
  7.     UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:basicViewController];  
  8.     // self.window.rootViewController = basicViewController.parentViewController;   
  9.     self.window.rootViewController = navigationController;  
  10.       
  11.     [self.window makeKeyAndVisible];  
  12.     return YES;  
  13. }  



等价于 

C++代码  iOS 深入理解UINavigationController 和 UIViewController 之间的关系
  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  
  2. {  
  3.     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];  
  4.     // Override point for customization after application launch.  
  5.   
  6.     BasicViewController  *basicViewController = [BasicViewController new];//实例化内存后,_parentViewController-->nil  
  7.     UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:basicViewController];  
  8.     self.window.rootViewController = basicViewController.parentViewController; //不可以注释上一句,因为上一句是为_parentViewController实例化  
  9.     // self.window.rootViewController = navigationController;  
  10.       
  11.     [self.window makeKeyAndVisible];  
  12.     return YES;  
  13. }  



分配内存如图 
iOS 深入理解UINavigationController 和 UIViewController 之间的关系

相关文章:

  • 2021-07-30
  • 2021-05-31
  • 2021-12-16
  • 2021-11-29
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-05-22
猜你喜欢
  • 2022-12-23
  • 2021-07-15
  • 2021-12-01
  • 2022-12-23
  • 2021-12-27
  • 2022-12-23
相关资源
相似解决方案