2012-03-11 60 views
0

我正在做的是创建一个登录屏幕作为第一页。一旦您登录并且它在服务器上验证您,它将清除登录字段,并且它会延续到主屏幕。该屏幕有一个我已经给出文本注销的后退按钮。单击它可以将您带回登录屏幕,并且由于登录按钮会在服务器之前对服务器进行验证,所以它基本上看起来像是在注销。试图了解segues,内存管理和最佳实践

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

我对此有何看法?或者对此有最佳做法吗?

回答

1

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

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

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