didReceiveMemoryWarning удаляет ячейки / представления из иерархии UITableView - PullRequest
0 голосов
/ 20 марта 2019

Я установил 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.

Но меня беспокоит, почему представления удаляются из иерархии таким образом, даже если мы твердо на них ссылаемся, и каким-либо образом можно это предотвратить?

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