我应该每次都初始化一个新的 ViewController 还是重置旧的 ViewController?

Should I keep initializing a new ViewController every time or reset the old ViewController?

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

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

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

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