2016-10-02 3 views
1

며칠 전에 나는 here이라는 문항을 게시했으며 아직 답변을 찾지 못했습니다. 나는 그것이 버그라고 생각하고 그것이 미래에 해결 될 수 있지만 도움이 될 수는 없지만 그것이 나 자신을 잘못하고있는 것일 수도 있다고 생각합니다.UISwitch deinit는 결코 호출되지 않았습니다.

이 질문을 통해 버그인지 확인할 수 있기를 바래서 프로젝트에 대해 계속 걱정하지 않고 계속 작업 할 수 있습니다. 이 질문이 반복적 인 경우 즉시 질문을 삭제합니다.

UISwitch을 서브 클래 싱하여 deinit을 추가하면 할당 해제 시점을 알 수 있습니다.

class CustomSwitch: UISwitch { deinit {print("Switch has been deinitialized")} } 

가 그럼 난 내보기 컨트롤러에 속성을 추가했습니다 :

func removeSwitch() { 
    print(customSwitch) 
    customSwitch = nil 
    print(customSwitch) 
} 

그리고 :

var customSwitch: CustomSwitch? = CustomSwitch() 

그것을 테스트하려면, 나는 다음과 같은 기능 버튼을 추가했습니다 콘솔에서 다음과 같이 인쇄하십시오.

Optional(<Debugging.CustomSwitch: 0x7f9ec91083c0; baseClass = UISwitch; frame = (0 0; 51 31); layer = <CALayer: 0x6100000384a0>>) 
nil 

초기화 메시지가 인쇄되지 않고 악기에 customSwitch가 여전히 메모리에 있음이 표시됩니다. 나는 이것에 대해 찾을 수

있는 유일한 방법은 this

+0

아이폰 OS 10.2에서 해결 말한다? –

+0

스위치가보기에 추가됩니까? 그렇다면 뷰는 메모리를 잃지 않을 것입니다. 이렇게하면 즉각적인 권한을 얻어야합니다. weak var customSwitch : CustomSwitch? = 강력한 참조가 없기 때문에 CustomSwitch(). –

+0

아니요보기에 추가되지 않습니다. 그것이 있었다고해도, 그것은 중요하지 않아야합니다. 내 버그 보고서가 중복으로 표시 되었기 때문에 알려진 버그입니다. –

답변

0

이것은 (마지막으로) 내가이 발생 유일한 사람

-1

Apple Docs에 따르면, 우리가 수동으로 deinit 수 없다고 생각합니다. 그것은 Deinitializers are called automatically, just before instance deallocation takes place. You are not allowed to call a deinitializer yourself.

+0

하지만 수동으로 deinit을 호출하지는 않습니다. –

관련 문제