Здравствуйте, у меня есть UIViewController
, который имеет 4 пользовательских UIView
. Функция deinit внутри UIViewController
вызывается, когда я изменяю rootViewController, но не вызывается внутри custom UIView
. Следовательно, он сохраняется в памяти после смены корневого контроллера. Если я вызываю myCustomView.removeFromSuperView()
внутри функции ViewControllers Deinit
, она работает. Тем не менее, я не хочу писать это каждый раз в viewcontrollers, поэтому я хочу написать это внутри пользовательского класса UIView, но Deinit
внутри Custom UIView никогда не вызывается.
Как мне объявить пользовательский вид:
lazy var myCustomView = WelcomeScreenButtonView(text: getLabelText(key: SUPPORTEDSERVICES), imageName: "img")
let firstStackView = UIStackView()
override func viewDidLoad(){
//I put it inside a UIStackView
firstStackView.addArrangedSubview(myCustomView)
view.addSubView(firstStackView)
}
deinit{
//If I do it like this, It works but I don't wanna call it in here
myCustomView.removeFromSuperView()
}
Мой пользовательский класс UIView:
class WelcomeScreenButtonView: UIView {
lazy var label = UILabel()
private lazy var logoImage = UIImageView()
override init(frame: CGRect) {
super.init(frame: frame)
setupUI()
setupConstraints()
}
required public init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
deinit {
//This one never get called
print("WelcomeScreen Button Deinited")
removeFromSuperview()
}
}
РЕДАКТИРОВАТЬ: Если я изменю свой пользовательский вид на UIView () (все остальные коды такие же). Это освобождает. Поэтому я думаю, что я имею отношение к пользовательскому классу UIView.