如何设置视图控制器以刷新视图中的字段,只有在导航控制器上按下该视图并从导航控制器视图中弹出对象时才会释放它们。
我的目标是视图控制器:
viewWillBePushed:
和viewWillBePopped:
是否有任何委托方法?
实施例
假设我有三层观点:
Movies (MovieListController)
--> Movie Basic Info (MovieInfoController)
--> Movie Credits (MovieCreditsController)
假设我们有一个班级Movie
来代表每部电影。
在这里,我想只有三个UIViewController
,每个在程序的运行时中有一个实例。因此,我可以为不同的电影重复使用相同的MovieInfoController
,同样MovieCreditsController
。
但是,我还希望MovieInfoController
仅在将其推送到堆栈时才更新其视图字段(例如标题,发布日期等)。即使viewWillAppear
被弹出,实施MovieCreditsController
中的显示也会强制它更新字段。
另外,我希望MovieInfoController
在弹出它时释放对Movie
的引用,以及任何可能很大的对象(例如封面图像)。在viewWillDisappear
中实现此逻辑将导致它在堆栈上推送MovieCreditsController
时释放数据。
有合理的吗?我是以错误的方式去做的吗?
答案 0 :(得分:1)
你有90%是因为你创建了一个Movie对象。 MovieListController应该拥有一个MovieInfoController。它应该在将-setMovie:
推送到导航控制器之前调用-setMovie:
。对-setMovie:
的调用应该是更新字段的内容。
同样,MovieInfoController应该拥有一个MovieCreditsController,并且应该在它上面调用[subController setMovie:nil]
,然后将其推送到导航控制器。
在MovieListController和MovieInfoController中,您可以在-viewDidAppear:
中调用{{1}}来释放内存。