首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当设置为空时,通过UIStoryboard.instantiateViewController初始化的UIViewController在单元测试期间不会取消初始化

当设置为空时,通过UIStoryboard.instantiateViewController初始化的UIViewController在单元测试期间不会取消初始化
EN

Stack Overflow用户
提问于 2020-07-22 11:40:55
回答 1查看 34关注 0票数 0

我搞不懂为什么用UIStoryboard.instantiateViewController实例化的UIViewController在单元测试中初始化时不能反初始化

下面是我期望去初始化的代码,但并没有:

代码语言:javascript
运行
复制
func testDoesNotDeinit() throws {
    var strongViewController: ViewController? =
        UIStoryboard(
            name: "Main",
            bundle: Bundle(for: ViewController.self)
        )
        .instantiateViewController(withIdentifier: "ViewController") as! ViewController

    print("set nil")
    strongViewController = nil
    print("post set nil")
}

结果是:

代码语言:javascript
运行
复制
set nil
post set nil
*** deinit *** // From deinit {} function in UIViewController

当UIViewController以编程方式初始化时,它将正确地取消初始化

代码语言:javascript
运行
复制
func testDoesDeinit() throws {
    var strongViewController: ViewController? = ViewController()

    XCTAssertNotNil(strongViewController)
    print("set nil")
    strongViewController = nil
    print("post set nil")
    XCTAssertNil(strongViewController)
}

with结果:

代码语言:javascript
运行
复制
set nil
*** deinit *** // From deinit {} function in UIViewController
post set nil

有什么想法吗?

EN

Stack Overflow用户

发布于 2020-07-22 12:17:55

我在print("post set nil")上设置了一个断点,并检查了那个时间点的内存图。我看到UIStoryboardScene的一个实例保留了VC

UIStoryboardScene似乎是一个私有的API。我能找到的唯一一件事就是this header。这可能是instantiateViewController的实现细节。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63026480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档