이것은 이전 질문에 대한 재 게시입니다. 너무 많은 수정 사항과 예제를 간략화했기 때문에 여러 번 질문을 다시 편집하지 않고 새 질문을 작성하면 더 명확해질 것이라고 생각했습니다. .UISwitch가 할당 해제되지 않음
문제 : 아무것도 그것으로 수행되어 있지 않은 경우에
UISwitch
객체가 어떻게 든 심지어 할당을 해제하지 않습니다.
PROJECT :
두 개의 뷰 컨트롤러가 있습니다. VC1 및 VC2. VC1에는 VC2를 표시하는 단추가 하나 있습니다. VC2는 사용자 정의 UISwitch
, UILabel
및 UIStepper
의 속성을 해제하기위한 버튼 하나를 포함합니다.
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
개체는 영구적 인 상태를 유지하고있는 반면 CustomLabels
및 CustomSteppy
개체는 그대로 있어야합니다. Rmaddy 제안도 내가 새 질문을 만들고 싶었 이유는 참조 카운트의 결과로
. 나는 SO에 대한 몇 가지 설명을 따라 갔지만, 무엇을 다 만들지는 잘 모르겠습니다.
질문 :
왜이 UISwitch이처럼 행동하고, 내가이 문제를 어떻게 해결할 수 있습니까?
이전 질문에 제안한 것을 수행 했습니까? 다시 말하면 인 스트 루먼트의 "레코드 참조 수"확인란을 선택하고 앱을 다시 프로파일 링하는 것이 었습니다. 그런 다음 각 스위치에 대한 참조를 유지 관리 중인지 확인하십시오. – rmaddy
@rmaddy 죄송합니다, 예 해냈습니다. 그 스크린 샷을 추가하는 것을 잊었습니다. 나는 정말로 혼란 스럽기 때문에 그것을 어떻게 만들 것인지 잘 모르겠습니다. 그것을 고치려고 노력했지만 여전히 운이 없다. –
숫자가 +0으로 표시됩니다. 즉 할당을 해제해야한다는 의미입니다. 실제 장치 또는 시뮬레이터에서 테스트 중입니까? 나는 이런 종류의 것들에 대한 시뮬레이터를 신뢰하지 않는다. – rmaddy