试图了解segue,内存管理和最佳实践

时间:2012-03-11 23:41:21

标签: ios5 storyboard segue

我正在做的是创建一个登录屏幕作为第一页。登录后,它会根据服务器验证您,它会清除登录字段并将其转移到主屏幕。那个屏幕有一个后退按钮,我已经给出了文本注销。单击它会将您带回登录屏幕,并且由于登录按钮会在segue之前验证您对服务器的影响,因此它基本上就像您正在退出。

但是,我想在每个页面上注销一个按钮。我想到的是在其他屏幕的导航栏上添加一个按钮。作为测试,我在几个级别的屏幕上添加了一个注销按钮,并将一个segue添加回登录屏幕。我更新了页面上的标签,看它是否回到了同一页面。当它回到登录屏幕时,标签是空白的,导致我相信我没有回到登录屏幕,而是创建了一个新的登录屏幕。如何退出并让它基本上回到起点?

我是以正确的方式进行此事还是有关于此的最佳做法?

1 个答案:

答案 0 :(得分:1)

每次通过segue转换到新的视图控制器时,您都在创建目标视图控制器的新实例。所以是的,如果您使用segue返回登录屏幕,您将向导航堆栈添加更多视图控制器。

听起来你正在使用UINavigationController。如果是这样,您可以使用方法popToRootViewControllerAnimated:从导航堆栈中删除所有视图控制器并返回到根(这是您的登录视图控制器)。当其他视图控制器从导航堆栈中移除时,它们将被解除分配,并且您不会遇到您描述的最终内存问题。

// do this when the user clicks your Logout button
[[self navigationController] popToRootViewControllerAnimated:NO];