gpt4 book ai didi

ios - 分配并初始化 destinationViewController

转载 作者:行者123 更新时间:2023-11-29 03:22:47 30 4
gpt4 key购买 nike

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@“DoSomething”]) {
if ([segue.destinationViewController isKindOfClass:[DoSomethingVC class]]) {
DoSomethingVC *doVC = (DoSomethingVC *)segue.destinationViewController;
doVC.neededInfo = ...; }
}
}

在上面的代码中,我不明白为什么需要局部变量 doVC。

如果你的destinationViewController已经存在于堆中,为什么不能将数据传递给它

seque.destinationViewController.neededInfo =...

如果堆中不存在,难道不应该分配并初始化它吗?这就是这行代码的主要作用吗?

DoSomethingVC *doVC = (DoSomethingVC *)segue.destinationViewController;

您正在分配并实例化 DoSomethingVC 类的实例吗?如果是这样,我不明白这个局部变量将如何保持事件状态,因为它是本地的。一旦序列完成,sourceVC 也会死亡。

我只是不明白编译器如何操作这个进程背后的内存并将数据从这个本地变量同步到destinationViewController。

最佳答案

segue.destinationViewControllerUIViewController 类型(尽管它实际上是一个 DoSomethingVC,其基类型为 UIViewController),所以它不会知道您的变量 neededInfo,这就是您需要将其转换为 DoDomethingVC 的原因。

它使 segue.destinationViewController 的类型 UIViewController 保持通用,因为它无法在编译时真正知道这个 destinationViewController 将要做什么是。

预感你对继承的把握有点不稳定(不是刻薄)但打个比方,如果 UIViewController 是说类型 Bird 并且DoSomethingVCDuck 类型,此 prepareForSegue: 方法知道 Bird 将成为 destinationViewController,但它不是此时不知道它是一只鸭子还是其他某种鸟,所以你必须明确地告诉它它会是什么(如果你弄错了它会做什么)坏事,或崩溃)框架也不知道有什么种类的鸟(因为你正在制造它们),所以它不能为你考虑

关于ios - 分配并初始化 destinationViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20870846/

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