显示详细信息转场时未调用 Deinit

2023-12-21

我在一个较大的 Swift 项目中遇到了这个问题,但能够在一个非常基本的项目中复制它。我有以下视图控制器类:

class ViewController: UIViewController {
    deinit {
        println("Deinitializing")
    }
    
    override func viewDidAppear(animated: Bool) {
        NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: "segue", userInfo: nil, repeats: false)
    }

    func segue() {
        self.performSegueWithIdentifier("segue", sender: self)
    }
}

我的故事板已配置,因此有两个视图控制器,都使用上面的类并带有Show Detailsegues 互相指向。我可以确认它们来回“弹跳”。尽管每次都会显示一个新实例,并且没有保留周期,但先前显示的视图控制器的deinit方法未被调用。

我已经能够通过使用自定义转场来获得我想要的行为,但我的问题是:这种行为是预期的吗?

该文档似乎表明它应该按照我的预期工作,我已经突出显示了我认为适用于我的测试项目的部分。

Source https://developer.apple.com/library/ios/recipes/xcode_help-IB_storyboard/chapters/StoryboardSegue.html

在详细信息区域中显示内容。如果应用程序显示主视图和详细信息视图,则新内容将替换当前详细信息。 如果应用程序仅显示主视图或细节视图,则内容将替换当前视图控制器堆栈的顶部。

我本以为替换当前视图控制器堆栈的顶部会导致当前视图控制器被取消初始化。

显示详细信息的替代方法

作为参考,我能够通过这个 segue 实现我想要的行为(这没有做任何花哨的事情,并且可能是不正确的):

class ExampleSegue: UIStoryboardSegue {
    override func perform() {
        let source = self.sourceViewController as UIViewController
        let destination = self.destinationViewController as UIViewController
        
        source.view.window?.rootViewController = destination
    }
}

感谢您的帮助!


如果您不使用导航控制器或拆分视图控制器,则“显示详细信息”segue 与模式演示相同。呈现另一个控制器的控制器在其presentedViewController属性中保留对其的引用(并且呈现的控制器在其presentingViewController属性中具有对演示者的引用)。因此,任何控制器都不会被释放。如果您想返回到上一个控制器,您应该使用展开转场或在代码中使用dismissViewControllerAnimated:completion。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

显示详细信息转场时未调用 Deinit 的相关文章

随机推荐

  • #include <图形.h>

    我如何使用 include
  • 每次选择框更改时使用ajax发送http请求

    您好 我正在使用 jquery 从 mysql 获取数据 它工作得很好 但我需要它在另一个选择框更改时更新选择框 这是我对 jquery 的了解 airports live change function var selectVal air
  • 使用 jQuery 的 Twitter feed

    我正在尝试使用 jQuery 解析 twitter 提供的 JSON 文件来制作一个显示 5 条推文的 twitter feed 我做了jsFiddle在这里 http jsfiddle net MichaelvandeWeerd 3Ubc
  • 使用 PCA 时出现数学域错误

    我正在使用 python 的 scikit learn 包来实现 PCA 我正在学习数学 domain error C Users Akshenndra Anaconda2 lib site packages sklearn decompo
  • 如何在 Bash 脚本中静默输出?

    我有一个输出到标准输出的程序 并且希望在通过管道传输到文件时使 Bash 脚本中的输出静音 例如 运行程序将输出 myprogram WELCOME TO MY PROGRAM Done 我希望以下脚本不向终端输出任何内容 bin bash
  • 在对话框中为列表视图设置适配器时出现 NullpointerException

    我想显示一个自定义对话框 其中有一个列表视图 首先看一下我下面的代码 Dialog protected void onPostExecute String file url btnInvite setOnClickListener new
  • 在 Unity 中运行时将带有文本的按钮动态添加到 UI [重复]

    这个问题在这里已经有答案了 我正在与C an Unity 5 6 1f1 我做了一个机制 在 UI 按钮上单击应该向 UI 上已有的面板添加一个带有文本的附加按钮 并且它确实有效 因为我能够看到对象出现在那里 public void Mak
  • 将 Outlook 电子邮件作为 .msg 文件保存到我的内部驱动器

    我正在尝试将 Outlook 电子邮件保存到我的 H Drive 中 我希望它作为运行脚本规则 但我无法让它工作 不涉及任何附件 我需要的只是将其保存为 msg 文件 如果您找到解决此问题的不同方法 请 lmk Thanks Sub Ext
  • Laravel 5:AppServiceProvider 与自定义提供程序

    几天前 我开始学习 Laravel 我无法理解一种机制 有 AppServiceProvider 我可以在其中注册 绑定 我的自定义类 接口等 但是在许多教程中 当作者创建自定义类来注册它们时 它们也会创建自定义服务提供程序类 而不是在 A
  • 如何将 HttpServletRequest 转换为字符串?

    我怎样才能转换HttpServletRequest to String 我需要解组HttpServletRequest但是当我尝试这样做时 我的程序会抛出异常 javax xml bind UnmarshalException with l
  • ViewPager + GridView onItemClick

    我在 ViewPager 的布局中有一个 GridView 我不确定这是否有影响 inside SampleAdapter for ViewPager Override public Object instantiateItem ViewG
  • (Ruby,Rails) CRUD 嵌套模型在单个页面上深度超过 4 层...?

    尽管有很多令人惊奇的信息 但它似乎常常达不到我疯狂的要求 也就是说 我正在寻找一种机制来处理单个页面上的多个嵌套模型 现在 我已经看过所有关于嵌套两个模型 Railscasts 等 的视频和帖子 不是真的 而是幽默一下 然而 我需要处理嵌套
  • 从中心点缩放向量?

    我试图弄清楚我是否有可以构成正方形的点 假设我知道这个广场的中心 我想要一个公式 可以使其大小例如两倍 但从中心开始 因此 新形状的大小是多边形中心的两倍 它必须适用于任何形状 而不仅仅是正方形 我更多地寻找其背后的理论而不是实现 如果你知
  • 正在向本地邮件服务器发送邮件 - “SENT: 550 地址无效。”

    我正在尝试将邮件发送到我的本地邮件服务器 我在用hMail服务器作为邮件服务器 我已将其配置为此处提到的 在 XAMPP 上设置本地邮件 SMTP POP3 IMAP 服务器 http thephpcode blogspot com 200
  • 将示例用法(markdown?)添加到 JavaDocs

    假设我有这个 有没有办法向每个方法添加 markdown 或 html 并提供如何使用该方法的示例 我正在考虑一个扩展面板 按钮显示 查看示例 它会打开一个面板 我尝试将其添加到内联文档中 pre code new BeanTranslat
  • 使用 RSS feed XML 并显示信息

    我必须在 Windows Phone 7 应用程序中使用 feed XML RSS 并将这些信息显示在ListBox 我尝试按照以下方式读取 XML feed 中的内容 private void button1 Click object s
  • 为什么 gcc 不编译未初始化的全局 const?

    当我尝试使用 g 编译以下内容时 const int zero int main return 0 我收到一个关于uninitialized const zero 我认为全局变量默认初始化为 0 1 为什么这里的情况不是这样呢 VS 编译得
  • JDK8 中使用的 Rhino javascript JSR-223-wrapper 在哪里?

    我的目的是在 AdaptOpenJDK 8 VM 中提供 JSR 223 javascript 引擎 所以我想到使用已经熟悉的Rhino OpenJDK wiki 文档在这里 https wiki openjdk java net disp
  • 查找目录和子目录中的所有零字节文件

    如何查找目录及其子目录中的所有零字节文件 我已经这样做了 bin bash lns vdir R dir awk print 8 t 5 temp for file in lns do if test file 0 then printf
  • 显示详细信息转场时未调用 Deinit

    我在一个较大的 Swift 项目中遇到了这个问题 但能够在一个非常基本的项目中复制它 我有以下视图控制器类 class ViewController UIViewController deinit println Deinitializin