您的位置:首页 > 产品设计 > UI/UE

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

2015-12-18 14:04 501 查看
创建三个类

C++代码


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:

C++代码


- (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;

}

等价于

C++代码


- (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;

}

分配内存如图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: