У меня раздражающая проблема с памятью с пользовательским UIView при попытке добавить его в качестве нижнего колонтитула tableView в VC.Вот что я делаю:
- Я объявляю пользовательский класс UIView с именем tableViewHeader.В моем нижнем колонтитуле должен отображаться логотип и некоторый текст, поэтому он имеет 2 глобальные переменные (представление UIImage и текстовое представление) и один метод init для инициализации этого класса UIView (т. Е. Путем добавления двух подвидов и установки некоторых ограничений).
- В моем VC в методе TableView footerForSection я объявляю новую переменную tableViewFooter, устанавливаю вложенные представления (присоединяю мой PNG и т. Д.) И возвращаю это представление.
Код прекрасно работает для отображения нижнего колонтитула, но он разрушает мою память - в тот момент, когда я запускаю свое приложение и открываю VC, содержащий этот tableViewHeader, моя память скачет на ~ 20 МБ (~ 20% скачка) и не освобождается после того, как мой VCосвобождается (я проверил, сам VC корректно деинициализируется, но не показывает никакого падения памяти).
Я протестировал несколько вещей:
- Без добавления этого footerView и открытия / закрытия VC не показывается скачок 20 МБ, поэтому я вполне уверен, что это вызвано этимcustom tableViewHeader ...
- Я также проверил, чтобы убедиться, что UIImage, который я загружаю из моих активов, не слишком велик, но только в 200 КБ.Кроме того, проблема заключается еще и в том, что память не освобождается после освобождения моего VC ...
- Я пытался объявить свои переменные (переменная tableViewFooter и дочерние представления в этом новом классе).) но это оставляет мои переменные как ноль, когда я пытаюсь добавить их как подвиды ...
У меня заканчиваются идеи относительно того, кто виноват / как это исправить, так что любая помощьВы могли бы дать мне будет очень признателен!
Мой код ниже - спасибо заранее!Francois
Мой класс TableFooterView:
class MessageTableFooterView: UIView {
var shouldUpdateConstraints = true
var logoView: UIImageView!
var explanationTextView: UITextView!
var addFriendBtn: UIButton!
override init(frame: CGRect){
super.init(frame: frame)
logoView = UIImageView(frame: CGRect.zero)
logoView?.autoSetDimension(.height, toSize: 145)
logoView?.autoSetDimension(.width, toSize: 145)
self.addSubview(logoView)
explanationTextView = UITextView(frame: CGRect.zero)
explanationTextView?.isEditable = false
explanationTextView?.isSelectable = false
explanationTextView?.font = UIFont(name: "HelveticaNeue", size: 17)
explanationTextView?.textColor = .darkGray
explanationTextView?.textAlignment = .center
self.addSubview(explanationTextView)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
Мой метод tableView viewForFooter:
func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
if MessageService.instance.savedMsgs.count > 0 {
return nil
} else {
let headerView = MessageTableFooterView(frame: CGRect.zero)
headerView.logoView.image = UIImage(named: "savedMessagesIcon")
headerView.explanationTextView?.text = "Blablabla"
return headerView
}
}