Пользовательский UIView сохраняется в памяти - PullRequest
0 голосов
/ 25 мая 2018

У меня раздражающая проблема с памятью с пользовательским 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
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...