【问题标题】:Should I keep initializing a new ViewController every time or reset the old ViewController?我应该每次都初始化一个新的 ViewController 还是重置旧的 ViewController?
【发布时间】:2020-02-21 18:58:23
【问题描述】:

我有一个应用程序,用户可以在其中列出他们关注的股票(因此它可以变化/变化)。当用户点击列表中的一个单元格时,它会打开一个显示股票数据的 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)
        }
    }
}

我曾尝试通过在每次使用后重置其中的 tableview/data 来尝试使用相同的 ViewController,但我无法成功地使这个过程顺利进行。这样做是否会导致我的应用出现问题,还是我应该尝试每次都使用下面的相同 ViewController?

class VCManager {

    static var stockVC = StockViewController()

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

【问题讨论】:

    标签: swift uiviewcontroller uikit


    【解决方案1】:

    每次初始化一个新的视图控制器不仅很好,而且很常见。当您关闭该视图控制器时,它的内存会自动释放,因此您不会超时增加内存使用量。 (除了您在该视图控制器中有一个可能导致内存泄漏的保留周期,但这是一个完全不同的主题)。

    【讨论】:

      【解决方案2】:

      我同意雷扎的观点。缓存视图控制器并不常见。创建视图控制器的新实例非常快,并且布局其视图取决于视图层次结构的复杂性。

      每次需要时创建一个新的视图控制器不仅具有仅在需要时消耗内存的优点,而且只要你需要它,它还可以从中删除状态处理。 IE。您不再需要更新模型,并且您的表格视图与底层模型数据同步,也就是确保您的数据源与模型和tableView.reloadData() 保持同步。理想情况下,您会将模型数组作为初始化程序的一部分注入,并将其存储为属性常量。使用常量还可以让其他人清楚您的意图,无需担心模型更改。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-26
        • 2017-11-15
        • 2018-01-27
        相关资源
        最近更新 更多