ios - 分配并初始化 destinationViewController

标签 ios objective-c

- (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/

相关文章:

ios - 如何检查 NSData 是字符串还是图像

ios - 必须在 iOS 中手动关闭键盘有什么好处

ios - 如何访问 xcode 项目中的 sqlite 文件?

ios - 子类中的委托(delegate)声明与父类中的委托(delegate)不兼容

ios - subview.origin 可以使用负坐标吗?

ios - iOS 内存不足崩溃,但内存消耗为 20MB

ios - 页面滚动在启用自动布局的情况下不起作用

ios - 我的应用程序支持 64 位吗? (IOS)

objective-c - 我应该如何重新创建 iOS 主屏幕打开文件夹动画?

ios - 可以从 iPhone 音乐库中读取 mp3 数据吗?