gpt4 book ai didi

ios - Segues 并从内存中清除历史 ViewController

转载 作者:行者123 更新时间:2023-11-30 12:37:53 25 4
gpt4 key购买 nike

我有一个 iPad 应用程序,它有很多屏幕和很多 segue 选项。目前,我只是使用 PerformSegueWithIdentifier 来启动这些转场,我担心随着用户执行越来越多的转场,我会占用大量内存。我看到人们建议使用函数 popToRootViewControllerAnimated: 如果使用 UINavigationController,但问题是我没有使用它。如何才能阻止 VC 数量激增?该应用程序的工作方式是,用户不断返回到根 VC - 实际上是一个搜索屏幕。因此,如果我可以在需要这样的转场时清除 VC 堆栈,我认为这将解决我的问题,但我不知道如何解决这个问题。感谢您的任何建议。

最佳答案

当您使用 Segues 时,流程会前后移动。当用户向后移动(即按“后退”)时,它不会推送到新的 VC,而是会弹出到已经存在的 VC。当您弹出时,当前的 VC 将从堆栈和内存中删除。

如果您在流程中需要向后移动,那么这是错误的。您只需要继续前进即可。

为 SEGUE 做好适当的准备

在准备 segue 时,您永远不应该创建自己的 View Controller 并推送到它们。 Storyboard可以为您完成所有这一切。

正确的prepareForSegue方法应该看起来像这样......

- (void)prepareForSegue:(UIStoryBoardSegue*)segue
{
if([segue.identifier isEqualToString:"SomeSegue"])
{
MyNewViewController *controller = segue.destinationViewController;

controller.someProperty = "some value to pass in";
}
}

这就是您所需要的。请注意,只有当您打算将一些信息传递给新的 View Controller 时才需要这样做。如果您不向前传递任何内容,那么您根本不需要此方法。

当该方法结束时,新的 VC 将通过 Storyboard 文件推送到屏幕上。

放松段落

如果您有随机流(如您的评论中所示),那么您可以使用展开转场来实现此目的。

在你的“A” View Controller 中有一个类似的功能......

- (IBAction)someUnwindAction:(UIStoryboardSegue*)sender
{
//some action to run when unwinding.
}

它需要接收一个 UIStoryboardSegue 对象。如果设置为 IBAction,您还可以从 Interface Builder 访问它。

现在,当您想要转到 A > B > C > B > A 时,只需使用标准的推送和弹出(从 segue 和后退按钮)即可。

当您想要转到 A > B > C > A 时,您可以使用 Controller C 中的展开转场。

如果 Controller C 中有取消按钮或其他内容,并且该按钮位于 Interface Builder 中,这应该会将您带回到 Controller A。然后在 Controller C 下方的 Interface Builder 中,您将看到一个带门的绿色小方 block ,一个箭头指向它。只需将取消按钮的操作指向该符号并选择“someUnwindAction”即可。 (注意,unwindAction 在 A 中,按钮在 C 中。)然后,XCode 使用它将您一直弹出到 A 并处理删除所有内存和内容。如果您愿意,也可以将其他信息发送回 A。

如果您想以编程方式从 C 访问此展开转场,那么您可以运行...

[self performSegueWithIdentifier:"someUnwindAction" sender:nil];

这也会弹回 A。

关于ios - Segues 并从内存中清除历史 ViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42628108/

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