2016-09-30 7 views
1

이것은 이전 질문에 대한 재 게시입니다. 너무 많은 수정 사항과 예제를 간략화했기 때문에 여러 번 질문을 다시 편집하지 않고 새 질문을 작성하면 더 명확해질 것이라고 생각했습니다. .UISwitch가 할당 해제되지 않음

문제 : 아무것도 그것으로 수행되어 있지 않은 경우에
UISwitch 객체가 어떻게 든 심지어 할당을 해제하지 않습니다.


PROJECT :
두 개의 뷰 컨트롤러가 있습니다. VC1 및 VC2. VC1에는 VC2를 표시하는 단추가 하나 있습니다. VC2는 사용자 정의 UISwitch, UILabelUIStepper의 속성을 해제하기위한 버튼 하나를 포함합니다.

VC1 :

class VC1: UIViewController { 

    let button = UIButton() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     view.addSubview(button) 

     button.addTarget(self, action: #selector(open), for: .touchUpInside) 

     // Some auto layout (not relevant to the question) 
    } 

    func open() { present(VC2(), animated: true) } 
} 

VC2 :

class VC2: UIViewController { 

    let button = UIButton() 

    let shifty = CustomSwitch() // Note: nothing has been done with this 
    let labels = CustomLabels() 
    let steppy = CustomSteppy() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     view.addSubview(button) 

     button.addTarget(self, action: #selector(close), for: .touchUpInside) 

     // Some auto layout (not relevant to the question) 
    } 

    func close() { dismiss(animated: true) } 
} 

서브 클래스 :

class CustomSwitch: UISwitch { deinit { print("Switch has been deinitialized") } } 
class CustomLabels: UILabel { deinit { print("Labels has been deinitialized") } } 
class CustomSteppy: UIStepper { deinit { print("Steppy has been deinitialized") } } 

나는이 서브 클래스를 생성하는 유일한 이유는 s입니다 o 프로파일 러에서 쉽게 추적 할 수 있습니다. UISwitch 서브 클래스를 만들지 않아도 마찬가지입니다.

편집 :
내가 추가 한 서브 클래스에 deinit하고 모두 UILabel뿐만 아니라 UIStepper로 메시지를 보여주고있다 :

Labels has been deinitialized 
Steppy has been deinitialized 

그래서는 UISwitch을하지 않는 것은 점점 초기화되지 않았습니다.

스크린 샷 : 스크린 샷에서
, 나는 열고 VC2를 여러 번 닫은. 거기에있는 CustomSwitch 개체는 영구적 인 상태를 유지하고있는 반면 CustomLabelsCustomSteppy 개체는 그대로 있어야합니다. Rmaddy 제안도 내가 새 질문을 만들고 싶었 이유는 참조 카운트의 결과로

Original state

. 나는 SO에 대한 몇 가지 설명을 따라 갔지만, 무엇을 다 만들지는 잘 모르겠습니다.

Reference counts (collapsed)

Reference counts


질문 :
왜이 UISwitch이처럼 행동하고, 내가이 문제를 어떻게 해결할 수 있습니까?

+0

이전 질문에 제안한 것을 수행 했습니까? 다시 말하면 인 스트 루먼트의 "레코드 참조 수"확인란을 선택하고 앱을 다시 프로파일 링하는 것이 었습니다. 그런 다음 각 스위치에 대한 참조를 유지 관리 중인지 확인하십시오. – rmaddy

+0

@rmaddy 죄송합니다, 예 해냈습니다. 그 스크린 샷을 추가하는 것을 잊었습니다. 나는 정말로 혼란 스럽기 때문에 그것을 어떻게 만들 것인지 잘 모르겠습니다. 그것을 고치려고 노력했지만 여전히 운이 없다. –

+0

숫자가 +0으로 표시됩니다. 즉 할당을 해제해야한다는 의미입니다. 실제 장치 또는 시뮬레이터에서 테스트 중입니까? 나는 이런 종류의 것들에 대한 시뮬레이터를 신뢰하지 않는다. – rmaddy

답변

0

이것은 (최종) iOS 10.2에서 수정되었습니다.