我设置了一个UITableView
,其中每个单元格都有一个子UIViewController
我尝试使用dequeueReusableCell(with identifier:)
重用单元格,并在willDisplay cell
和didEndDisplaying cell
方法上添加/删除子视图控制器。
我更喜欢使用的另一件事是不使单元出队并像这样存储/访问它们:
let cell: FeedCell
if let cached = feedCells[feedItem.uuid]{
cell = cached
}else{
cell = Bundle.main.loadNibNamed("FeedCell", owner: nil, options: nil)?.first as! FeedCell
cell.feedItem = feedItem
feedCells[feedItem.uuid] = cell
}
基本上,属性feedCells
是字典[String: FeedCell]
,当我重用单元格时,它是[String: UIViewController]
我确定我的问题的关键是这本字典和didReceiveMemoryWarning
每当我在应用程序中收到内存警告时,该词典中的可见单元格或ViewController都会从视图层次结构中删除,即使它们在词典中包含strong
引用也是如此。它们确实存在于字典中,因此我可以重新加载表视图并再次显示它们。我现在在didReceiveMemoryWarning
上要做的事情。
但是我担心的是,即使我们一直对视图有很强的引用,为什么也会从这样的层次结构中删除视图呢?