比较以下测试:
func testWebView_dealloc() {
var obj: WKWebView? = WKWebView()
weak var objUnderTest = obj
obj = nil
XCTAssertNil(obj) // true
XCTAssertNil(objUnderTest) // false
}
func testCustomObject_dealloc() {
class MyClass {}
var obj: MyClass? = MyClass()
weak var objUnderTest = obj
obj = nil
XCTAssertNil(obj) // true
XCTAssertNil(objUnderTest) // true
}
WKWebView
似乎根本没有解除分配,而自定义类解除分配就好了。
我在这里遗漏了什么还是这是 WKWebView
的错误?
如果像这样简化会更奇怪:
weak var obj = WKWebView() // Instance will be immediately deallocated because variable 'obj' is 'weak'
print(obj) // Optional(<WKWebView: 0x7facee832200; frame = (0 0; 0 0); layer = <CALayer: 0x600000fb6ee0>>)
你说立即解除分配?我猜不是。