我搞不懂为什么用UIStoryboard.instantiateViewController实例化的UIViewController在单元测试中初始化时不能反初始化
下面是我期望去初始化的代码,但并没有:
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")
}结果是:
set nil
post set nil
*** deinit *** // From deinit {} function in UIViewController当UIViewController以编程方式初始化时,它将正确地取消初始化
func testDoesDeinit() throws {
var strongViewController: ViewController? = ViewController()
XCTAssertNotNil(strongViewController)
print("set nil")
strongViewController = nil
print("post set nil")
XCTAssertNil(strongViewController)
}with结果:
set nil
*** deinit *** // From deinit {} function in UIViewController
post set nil有什么想法吗?
发布于 2020-07-22 12:17:55
我在print("post set nil")上设置了一个断点,并检查了那个时间点的内存图。我看到UIStoryboardScene的一个实例保留了VC

UIStoryboardScene似乎是一个私有的API。我能找到的唯一一件事就是this header。这可能是instantiateViewController的实现细节。
https://stackoverflow.com/questions/63026480
复制相似问题