I have discovered that my UIViewcontroller is not calling deinit()
under the following scenario.
I am using this code extension to make my life easier by adding tap gesture recognizers.
https://gist.github.com/saoudrizwan/548aa90be174320fbaa6b3e71f01f6ae
I've used this code in one of my VCs, which I've stripped down to the barest minimum amount of code:
and in viewDidLoad()
I did this:
// When the user taps on a label, have its related textbox automatically get the caret so they can type
// Add tapping so when you tap on a label it makes the corresponding textbox first responder
lblSubject.addTapGestureRecognizer {
self.txtSubject.becomeFirstResponder()
}
It appears that the line:
self.txtSubject.becomeFirstResponder()
Is the problem - when I leave this line above in that closure, deinit()
does not call in my VC.
When I take the above line out or replace it with something like print("hello world")
deinit()
properly calls. txtSubject is @IBOutlet weak var txtSubject: UITextField!
I am not entirely sure what to do here. I read that when you trigger becomeFirstResponder()
it's important you call resignFirstResponder()
, but even if I don't tap the label (so as to not give becomeFirstResponder()
a chance to even call) I still cannot hit deinit()
Any ideas where I can look further?
Thanks so much.
Change
To
unowned
is often feared as dangerous, but there is no danger here. Ifself
ceases to exist, there will be nothing to tap and the code will never run.