Objective c 如何处理由于内存不足而导致页面卸载的情况

Objective c 如何处理由于内存不足而导致页面卸载的情况,objective-c,ios,memory-management,Objective C,Ios,Memory Management,当我的UserProfileTableViewController由于内存不足(可能是由于在我的应用程序中使用了摄像头功能)而卸载时,就会出现问题。页面将无法正确加载,因为它缺少从应用程序委托传递的“userId”信息(如上所示)。我无法直接在UserProfileTableViewController(在view Dod load方法中)中设置此用户ID信息,因为其他页面在将页面推送到堆栈上时可能会传递不同的用户ID 有没有关于如何解决此问题的建议?首先,您应该将UserProfileTabl

当我的UserProfileTableViewController由于内存不足(可能是由于在我的应用程序中使用了摄像头功能)而卸载时,就会出现问题。页面将无法正确加载,因为它缺少从应用程序委托传递的“userId”信息(如上所示)。我无法直接在UserProfileTableViewController(在view Dod load方法中)中设置此用户ID信息,因为其他页面在将页面推送到堆栈上时可能会传递不同的用户ID


有没有关于如何解决此问题的建议?

首先,您应该将UserProfileTableViewController对象保存在应用程序委托的ivar中(因为您在其中分配了它)。其次,让应用程序委托向控制器提供该用户ID。第三,如果导航控制器从接口中移除/解除分配,则即使内存较低,也不应解除分配UPVC。 视图控制器维护控制器的完整层次结构,即使在内存不足时,删除的是视图以及您告诉它们要删除的任何内容


您当然也希望将UINavigationController保存在AppDelegate的ivar中。

您的视图未卸载,因此您的用户ID不应丢失,除非您在
viewDidUnLoad
方法中将其设置为nil,在这种情况下,您不应该将其设置为nil。我们可以看到您的
viewDidUnload
方法吗?您应该只释放/设置为nil ws在
viewDidLoad
中创建的任何内容,并将这两个方法视为匹配的一对。我感觉你在某个时候把id设为零,就像@rog saidPaul.s我认为你是对的。实际上,我设置的值比我所看到的加载为零的值要多。1。您不需要将
upvc
保存在ivar中,因为它不属于
appDelegate
它属于
UINavigationController
。2.这已经在第三行中完成。最好将ivar保存到
UINavigationController
,以便于以后访问。问题是id丢失,仅仅拥有另一个指针不会阻止调用
viewDidUnload
//In App Delegate
UserProfileTableViewController *uptvc = [[UserProfileTableViewController alloc]init];
UITabBarItem *tempTabBarItem4 = [[UITabBarItem alloc]initWithTitle:@"Fans" image:nil tag:FANSTAB_INDEX];

//I am setting the user id information here directly in app delegate
uptvc.userId = [[UserStockInfo sharedUserStockInfo]getUserId];
UINavigationController *navconUptvc = [[UINavigationController alloc]initWithRootViewController:uptvc];