최근 단위 테스트를 사용하여 내가 작성한 객체가 올바르게 할당되지 않았는지 확인하려고했습니다. 그러나 테스트를 완료하기 전에 객체를 시도해도 객체의 할당을 해제하지 않았 음을 알았습니다. 그래서 약한 변수를 사용하여 객체 할당 해제의 기초를 증명하려는 간단한 예제 (아래 참조)로 테스트를 축소했습니다.Swift XCTest : 약한 변수의 적절한 할당 해제 확인
내 생각에 강한 참조는 테스트 메소드가 종료 된 후에도 객체를 유지하지 않아야하며 약한 참조는 다음 실행 루프에서 참조 될 때 nil이어야합니다. 그러나 약한 참조는 결코 0이 아니며 두 테스트가 모두 실패합니다. 내가 여기서 뭔가를 오해하니? 아래는 전체 단위 테스트입니다.
class Mock { //class type, should behave with reference semantics
init() { }
}
class DeallocationTests: XCTestCase {
func testWeakVarDeallocation() {
let strongMock = Mock()
weak var weakMock: Mock? = strongMock
let expt = expectation(description: "deallocated")
DispatchQueue.main.async {
XCTAssertNil(weakMock) //This assertion fails
expt.fulfill()
}
waitForExpectations(timeout: 1.0, handler: nil)
}
func testCaptureListDeallocation() {
let strongMock = Mock()
let expt = expectation(description: "deallocated")
DispatchQueue.main.async { [weak weakMock = strongMock] in
XCTAssertNil(weakMock) //This assertion also fails
expt.fulfill()
}
waitForExpectations(timeout: 1.0, handler: nil)
}
}
나는 아마 해제가 XCTest에 의해 어떻게 든 연기하지만, 심지어 객체가 할당 해제 발생하지 않았던
autoreleasepool
의 시험 방법 몸을 감싸는되었다는 생각했다.
'할 필요가 weakMock' 옵션, 예를 들어, 약한 약한 약한 모자 : 모의? = strongMock'. 'nil'으로 설정할 수 없다면 해제 할 수 없습니다. – par
@par'weakMock'은 컴파일러에 의해 강제로 자동 선택됩니다. 'weakMock'의 타입을 검사하면 명시 적 타입 주석없이'Mock? '이됩니다. –
그리고 명시 적으로 선택하면 선택 사항이 없습니까? – par