gpt4 book ai didi

ios - 如何正确管理内存栈和 View Controller ?

转载 作者:可可西里 更新时间:2023-11-01 03:34:02 25 4
gpt4 key购买 nike

我真的在为这些基本的 iOS 编程而苦苦挣扎,但我就是不知道发生了什么以及如何解决它。

我有我的主登录 Controller ,它检测用户何时登录并在身份验证成功时显示下一个 Controller :

@interface LoginViewController (){

//Main root instance
RootViewController *mainPlatformRootControler;
}

-(void)loggedInActionWithToken:(NSString *)token anonymous:(BOOL)isAnon{
NSLog(@"User loged in.");

mainPlatformRootControler = [self.storyboard instantiateViewControllerWithIdentifier:@"rootViewCOntrollerStoryIdentifier"];

[self presentViewController:mainPlatformRootControler animated:YES completion:^{

}];

}

而且效果很好,没问题。

我的麻烦是处理注销。如何完全删除 RootViewController 实例并显示一个新实例?

我可以看到 RootViewController 实例正在堆叠,因为我有多个观察者,在注销然后登录后,它们被多次调用(我退出并重新进入的次数)。

我尝试了以下但没有成功:

首先在 RootViewController 中检测注销并解除:

[self dismissViewControllerAnimated:YES completion:^{
[[NSNotificationCenter defaultCenter] postNotificationName:@"shouldLogOut" object:nil];

}];

然后在 LoginViewController 中:

-(void)shouldLogOut:(NSNotification *) not{
NSLog(@"No user signed in");
mainPlatformRootControler = NULL;
mainPlatformRootControler = nil;
}

那我该如何处理呢?我知道它是一个基本的内存句柄,但我不知道怎么做?

最佳答案

首先,您必须观察 viewDidLoad 中的“shouldLogOut”应该如下所示:

    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(shouldLogout:) name:@"shouldLogout" object:nil];

然后在 dismissViewControllerAnimated 中应该如下所示:

[self dismissViewControllerAnimated:true completion:^{
[[NSNotificationCenter defaultCenter] postNotificationName:@"shouldLogOut" object:nil];
}];

你需要在登录 View Controller 中定义 shouldLogOut: 选择器

-(void)shouldLogOut:(NSNotification *) not{
mainPlatformRootControler = nil;
}

希望对您有所帮助!

关于ios - 如何正确管理内存栈和 View Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50160686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com