当 meory 警告发生时,我仍在尝试了解管理视图的过程。我在这个答案中收到了一些很好的信息,但我仍然有问题。
假设我有一个视图控制器VC1,其中包含一个由视图控制器VC2 管理的子视图(它具有该子视图它的视图属性)。最初,如果我想将 VC2 视图放入另一个 VC1 视图中,那么我可能会这样做:
UIView *VC2 = [UIView alloc] initWithFram...];
VC2.delegate = self;
... // other references to VC2, but not to it's view, yet.
[VC1.view addSubview VC2.view]; // At this point VC2 loadView is called automatically,
// followed by VC2 viewDidLoad.
稍后,在 VC2 中收到内存警告。所以调用了VC2的didReceiveMemoryWarning,接着调用了VC2的viewDidUnload。
这就是我的理解结束的地方(如果我已经说的是正确的话!)
我期望神奇地发生的是 VC2 中的视图及其资源可以被释放(例如,它可能是标签栏控制器引用的一个视图,但当前未显示),如果它应该可以正常工作都可以通过 VC2 的 viewDidLoad 方法重新创建。假设暂时看不到VC2的视图,应该是release了。
它究竟是如何发布的?didReceiveMemoryWarning 在 VC2 中执行。VC2是否发布了自己的观点?如果没有,假设会发生什么。
第二个问题,如果VC2的视图已经发布,假设再次需要该视图(比如有人在标签栏上选择了相应的标签)。我的理解是,如果引用了 VC2 的view 属性,则会调用 VC2 loadView 。最初,当 VC1 使用属性引用将其添加为子视图时,它被引用。标签栏控制器可以通过视图控制器 VC2 引用它来调用它,该控制器位于标签栏控制器的 viewControllers 数组中。所以我猜标签栏控制器将引用视图属性,这会导致调用 VC2 loadView。
好吧,我完成了第二个问题,并且可能同时回答了它。有人可以确认我是否理解正确吗?
此外,我仍然不清楚(如我的第一个问题)VC2 视图应该如何以及在何处发布。
是否有人可以向我指出一个教程,该教程介绍了发布视图和视图层次结构以响应内存警告的整个过程,还解释了在需要时如何重构已发布的视图?这真的有助于我理解这个过程。