Мне интересно, если я каким-то образом наткнулся на ошибку, где проведите удалять, чтобы удалить UITableViewCells
, никогда не освобождайте, когда делают их UITableViewController
.deleteRowsAtIndexPaths: проведите по удалению строк, никогда не освобождая ячейку?
Я добавил метод -dealloc в свою собственную ячейку таблицы, которая выводит сообщение. Когда я нажимаю на контроллер навигации, все 6 сообщений выходят из системы.
Если я проведу, чтобы удалить один (или более), и нажмите назад, регистрируется только 5. Поэтому я оставляю адрес указателя ячейки, которая была удалена, для дальнейшего использования. Теперь, когда я иду назад и приостановить выполнение в любой момент я могу войти в lldb строку:
po 140382950334240
<TableLeakCell: 0x7fe67852a490; baseClass = UITableViewCell; frame = (-375 176; 375 44); text = 'Chris'; hidden = YES; autoresize = W; gestureRecognizers = <NSArray: 0x7fe678530d70>; layer = <CALayer: 0x7fe67852a860>>
Это должно быть высвобождено! x.position
ячейки - это точно -(tableView.width)
и hidden=YES
. Как и в ячейке, все еще находится в позиции после завершения анимации. Или, возможно, его ставят в очередь за повторное использование? В любом случае, он существует навсегда, и в документации Apple нет ничего о необходимости вручную уничтожить ячейку после вызова deleteRowsAtIndexPaths.
Краткое доказательство концепции проекта здесь: https://github.com/iOSDigital/UITableViewLeak
Nice demo. Создайте отчет об ошибке с Apple! – matt