Я обычно настраиваю UIImageView
и UITextField
и т. Д., Как в примере ниже. Однако в приведенном ниже примере я получаю утечку памяти и не знаю, почему.
Если я использую стандарт, настроенный с помощью
var buttonImageView: UIImageView!
и настройте buttonImageView
в методе init, утечка исчезнет
OR
с приведенным ниже примером, если я сделаю это lazy
утечка также исчезнет
Пример * ** тысяча двадцать-один * тысяча двадцать два
class BasicButton: UIControl {
// Cause of leak
var buttonImageView: UIImageView = {
let logoView = UIImageView()
logoView.contentMode = .scaleAspectFill
logoView.tintColor = UIColor.blue
logoView.translatesAutoresizingMaskIntoConstraints = false
logoView.isUserInteractionEnabled = false
return logoView
}()
init(image: UIImage) {
self.init()
buttonImageView.image = image
setupView()
}
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
private func setupView() {
addSubview(buttonImageView)
setupLayout()
}
private func setupLayout() {
translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
buttonImageView.centerXAnchor.constraint(equalTo: centerXAnchor),
buttonImageView.centerYAnchor.constraint(equalTo: centerYAnchor),
buttonImageView.heightAnchor.constraint(equalToConstant: 80),
buttonImageView.widthAnchor.constraint(equalToConstant: 80)
])
}
}