这是一个令人尴尬的简单问题,但我需要保留一个视图控制器,而我当前的解决方案不是解决方案。
我有一个滑出表格视图菜单,可以让我选择一个新的视图控制器来推到最前面。当我选择一个视图时,它会释放旧的主视图控制器以推送新的主视图控制器。由于我 90% 的功能都围绕一个视图控制器,我希望它保留在内存中,这样我就不必经常花费资源来分配它,也不必从核心数据中提取最后一个数据源或发出网络请求。
我天真地尝试设置一个占位符temporaryMainViewController
并将其分配给我的中心视图控制器,然后再分配另一个 VC,但是将当前主视图控制器temporaryMainViewController
分配给只是分配主视图控制器的地址 - 所以当它改变时,我的 tempVC . 尝试copy
查看控制器会导致崩溃。
那么我怎样才能有效地self.temporaryMainViewController = self.currentCenterViewController;
在临时控制器由对象值而不是地址值分配的地方呢?
-- 编辑 -- 更多信息:
ECSlidingViewController在内存中保留(在我的情况下)3 个控制器——顶部/中心/主视图控制器、一个左隐藏控制器和一个右隐藏控制器。我的左侧隐藏控制器是一个LeftMenuTableViewController
表格视图,其中每一行在被选中时都会观察我与该 indexPath 关联的视图控制器类,然后实例化该类的一个实例并使用简单的赋值语句将其设置为 topViewController。当一个新的视图控制器被分配给顶视图时,我只想在内存中保留我的初始顶视图控制器(类PlacesNavigationViewController
(包含PlacesTableViewController
))。
我的第一种方法是在 中声明一个占位符属性LeftMenuTableViewController
,因为它本身永远不会留下内存。
@property (nonatomic, strong) UIViewController* temporaryViewController;
然后在didSelectRowAtIndexPath
:
// make local variables for storyboard and the identifier of the view controller that will be pushed, then..
self.temporaryViewController = self.topViewController;
self.topViewController = [storyboard instantiateViewControllerWithIdentifier:newViewControllerIdentifier];
但这失败了,因为临时控制器被分配了 topViewController 的内存地址——在下一行中,它被赋予了一个新的视图控制器来保存。
所以我需要一种保存内容的方法,topViewController
以便在topViewController
更改时,我仍然在内存中保留旧的 VC。
我可能忘记了 Objective-C 的一些明显原则,但这会带来很多麻烦。如果我没有说清楚,请告诉我。