如何处理iOS中的LogOut场景?

时间:2014-10-10 07:58:15

标签: ios

我正在为我的应用登录Facebook,并以我的应用的设置形式注销方案。当我点击退出按钮时,我正在执行以下步骤,并且工作正常。 1)清除活动会话 2)关闭活动会话 3)删除存储在NSuserdefault中的用户令牌。

现在我必须在注销后再次启动Facebook登录表单。这工作正常。 现在出现问题,在启动facebook登录表单之前,我是否需要删除之前访问过的所有视图控制器?我没有在我的应用程序中使用导航控制器,并且所有呈现和解除视图控制器都是手动处理的。当我从一个视图控制器转到另一个视图控制器时,如果我不需要它们,我就会解雇几个视图控制器,当我回到之前的视图控制器时,很少我不会因为我需要它而解雇。当用户退出时,我将启动Facebook登录表单。但是仍然在内存中的视图控制器怎么样?我是否也需要照顾这种情况?如果我必须自己处理它,那么如何处理呢?

我正在从注销按钮启动Facebook登录视图控制器,如下所示。

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex==0)
{
    [FBSession.activeSession closeAndClearTokenInformation];
    [FBSession.activeSession close];
    [FBSession setActiveSession:nil];
    [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"UserId"];
    [[NSUserDefaults standardUserDefaults] synchronize];
   UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

    FbLoginViewController *frm_athenticate = (FbLoginViewController *) [sb instantiateViewControllerWithIdentifier:@"autenticate"];
     [self dismissViewControllerAnimated:YES completion: nil];


  MyAppDelegate * appsDelegate =(MyAppDelegate *)[[UIApplication sharedApplication] delegate];
  [appsDelegate.window setRootViewController:nil];
   [appsDelegate.window setRootViewController:frm_athenticate];      
}
}

1 个答案:

答案 0 :(得分:0)

当您执行注销方案时,您可能会转到登录页面。应取消分配所有inapp控制器(登录页面除外)以防止此时内存泄漏。您可以通过向所有控制器添加dealloc方法来检查它,并在注销时对其进行NSLog检查。如果其中一些还活着,那么你必须直接解除分配。