在说
的情况下- (void)applicationDidFinishLaunching:(UIApplication *)application {
...
[window addSubview:gameController.view];
...
}
gameController的视图如何保持与gameController的关联?我已经达到所有调试器变量的峰值,除了布尔标志以外,我看不到它属于视图控制器的关联。所以视图被传递到视图层次结构(不一定必须离开窗口),但是gameController将获取诸如shouldAutorotateToInterfaceOrientation之类的事件。如果不是因为UIView中的一些隐藏的引用传出了gameController.view
,那么它在哪里被跟踪?UIView *tmp = gameController.view;
[window addSubview:tmp];
很明显gameController知道tmp,但是那个代码之后窗口如何知道gameController?
答案 0 :(得分:4)
UIViewController是UIResponder的后代,并插入到视图和该视图的superview之间的响应链中。因此,在由UIViewController管理的视图上调用nextResponder
将返回UIViewController的所述实例。
这就是shouldAutorotateToInterfaceOrientation:
等事件通过UIResponder实例的层次结构传递的方式。可以在figure 3.1 in the iPhone Application Programming Guide中看到显示此图表。