이것은 우리 프로젝트의 두 컨트롤러에 나타나는 것으로 보입니다. 코드 및 스토리 보드를 모두 확인했으며 스토리 보드의 코드가 컨트롤러에서 호출되지 않았으므로 코드를 트리거하는 버튼과 관련된 IBAction이나 IBOutlet은 없습니다. 컨트롤러에서 나가면 인쇄에서 deinit 메서드가 두 번 호출된다는 것을 알 수 있습니다.Deinit가 두 번 호출되었습니다.
viewDidLoad 및 viewWillDisappear는 한 번만 호출되기 때문에 이것은 이상합니다. 이전에이 동작이 발생 했습니까? SO에 관해서는 아무런 관련이 없으며 무슨 일이 벌어지고 있는지 이해하고 싶습니다.
편집 : 업데이트가 거의 없습니다. 난 내가 컨트롤러가 초기화 될 때 확인에 중단 점을 설정 코드의이 비트 추가 : 내 컨트롤러에 얻을 수있는 SEGUE를 트리거 그래서 초기화 코더가 ONCE라고
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}
required init(coder aDecoder: NSCoder) {
print("init coder style")
super.init(coder: aDecoder)!
}
을, 그리고 난에 누를 때 popSegue에 연결되어있는 컨트롤러의 ok 버튼을 클릭하면 내 컨트롤러가 init (두 번째로 init 코더와 함께) 된 다음 double deinit이 발생합니다.
그래서 내 컨트롤러의 빈 인스턴스는 popSegue로 닫을 때 만들어집니다. 나는 왜 그런지 이해하지 못한다.
두 viewcontroller에 대한 관련 코드를 게시 할 수 있습니까? 문맥이나 코드가없는 이유가 무엇인지 추측하기가 매우 어렵습니다. – idocode
문제는, 코드가 없다는 것입니다. 스토리 보드 참조로 연결되는 세그 (segue)에 연결된 UIButton 만 있습니다. 코드에서 performSegueWithIdentifier를 호출하지 않고 수동 인스턴스화를 수행하지 않습니다. 이 컨트롤러와 관련된 유일한 코드는 segue의 식별자가 일치하는 경우 delegate를 설정하는 데 사용하는 prepareForSegue에 있습니다. 또한 위임자를 설정하기 위해 자체를 캡처하는 var는 약한 var이므로 강력한 참조주기가 필요하지 않습니다. –
"수동 인스턴스화를 수행하지 마십시오."라고 생각합니다. – matt