2015-10-19 4 views
2

проблема в моем проекте. Но я также попробовал в новом проекте проекта xcode приложение «Мастер-детализация».UITableViewCell объект deinit никогда не назывался

Я создал базовый класс Cell и отобразил ячейку на раскадровке. После удаления операции deinit никогда не вызывается. Нет никакой сильной или слабой ссылки на ячейку.

class Cell:UITableViewCell { 
    deinit{ 
     print("Deinit Called") 
    } 
} 


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! Cell 

    let object = objects[indexPath.row] as! NSDate 
    cell.textLabel!.text = object.description 
    return cell 
} 
+2

Я полагаю, что причина заключается в табличной ячейке повторно, поэтому они на самом деле не удаляется, просто вернуться в бассейн клетки на самом деле. – reviver

+2

Ваша ячейка не будет деинициализирована до тех пор, пока вид таблицы не будет деинициализирован, и это потому, что просмотр таблиц имеет сильную ссылку на него –

+0

:) Конечно. Спасибо. – ervanux

ответ

0

UITableViewCells работать ленивым вар, они инициализируются на первом использовании и сохраняются в живых, как долго UITableView, что инициализируется их жив, что происходит на данный момент регистр: forIdentifier: называется. Если вы используете раскадровку, это сделано для вас.

Почему это делается? Каждая ячейка может быть повторно использована с помощью dequeueReusableCellWithIdentifier, поэтому UITableView сохраняет экземпляр, который будет использоваться при необходимости.

Если вам необходимо очистить некоторые данные, просто позвоните prepareForReuse на UITableViewCell