我无法弄清楚为什么用 UIStoryboard.instantiateViewController 实例化的 UIViewController 在单元测试中初始化时不会取消初始化
这是我希望 deinit 但没有的代码:
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)
}
结果:
set nil
*** deinit *** // From deinit {} function in UIViewController
post set nil
有任何想法吗?