Должен ли я каждый раз инициализировать новый ViewController или сбрасывать старый ViewController? - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть приложение, в котором у пользователя есть список акций, за которыми он следит (так что он может меняться / меняться). Когда пользователь щелкает ячейку в списке, он открывает StockViewController (), который показывает данные о запасах. Я начал беспокоиться о том, что инициализация нового ViewController каждый раз является плохой практикой и приводит к увеличению использования памяти с течением времени (даже не совсем уверен, так ли это).

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    if(indexPath.section == 1) {
        let stockVC = StockViewController()
        stockVC.parentView = self
        stockVC.stock = followingStocks[indexPath.row]
        DispatchQueue.main.async {
            self.present(stockVC, animated: true, completion: nil)
        }
    }
}

Я пытался использовать тот же ViewController, сбрасывая представление таблицы / данные внутри него после каждого использования, но у меня возникают проблемы с успешным выполнением этого плавного процесса. Делает ли это вышеуказанным способом, вызывает ли это проблемы в моем приложении, или я должен пытаться использовать один и тот же ViewController, ниже, каждый раз?

class VCManager {

    static var stockVC = StockViewController()

    static func resetStockVC() {
        stockVC.stockData = [StockData]()
        stockVC.tableView.reloadData()
    }
}

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

Инициализация нового контроллера представления каждый раз не только хороша, но и очень распространена. Когда вы отключаете этот контроллер представления, память для него автоматически освобождается, поэтому вы не будете увеличивать использование памяти со временем. (За исключением того, что у вас есть цикл сохранения в этом контроллере представления, который потенциально может вызвать утечку памяти, но это совершенно другая топика c своего собственного).

0 голосов
/ 22 февраля 2020

Я согласен с Резой. Кэширование контроллера представления является редкостью. Создание нового экземпляра контроллера представления действительно быстро, и его расположение зависит от сложности иерархии представлений.

Создание нового контроллера представления каждый раз, когда вам нужно, имеет преимущество не только в том, что потребляет память, только когда он вам нужен и пока он вам нужен, но он также удаляет из него обработку состояний. Т.е. вам больше не нужно заботиться об обновлении вашей модели и что ваше табличное представление синхронизируется с c с базовыми данными модели, то есть убедитесь, что ваш источник данных соответствует модели и tableView.reloadData(). В идеале вы должны внедрить массив вашей модели как часть вашего инициализатора и сохранить его как константу свойства. Использование константы также делает ваше намерение очевидным для других, что не будет никаких изменений модели, о которых стоит беспокоиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...