deleteRowsAtIndexPaths: Wischen, um Zeilen zu löschen, wird die Zelle nie freigegeben?

8

Ich frage mich, ob ich irgendwie über einen Fehler gestolpert bin, bei dem das Wischen zum Löschen von UITableViewCells niemals aufgehoben wird, wenn ihr UITableViewController funktioniert.

Ich habe meiner benutzerdefinierten Tabellenzelle eine -dealloc-Methode hinzugefügt, die eine Nachricht ausloggt. Wenn ich auf den Navigationscontroller drücke, werden alle 6 Nachrichten abgemeldet.

Wenn ich wische, um einen (oder mehrere) zu löschen, und drücke zurück, werden nur 5 protokolliert. Also logge ich die Zeigeradresse der Zelle aus, die gelöscht wurde, für zukünftige Referenz. Wenn ich jetzt zurückgehe und die Ausführung zu irgendeinem Zeitpunkt pausiere, kann ich die Eingabeaufforderung für die lldb eingeben:

%Vor%

Dies sollte freigegeben worden sein! Der x.position der Zelle ist genau -(tableView.width) und hidden=YES . Wie in der Zelle ist noch in der Position, nachdem die Animation beendet ist. Oder vielleicht wird es zur Wiederverwendung in die Warteschlange gestellt? So oder so, es ist für immer da, und es gibt nichts in Apples Dokumentation über das manuelle Zerstören einer Zelle nach dem Aufruf von deleteRowsAtIndexPaths.

Schnelles Proof-of-Concept-Projekt hier: Ссылка

    
derbs 03.12.2015, 00:48
quelle

1 Antwort

0

Zumindest mit Xcode 7.2/iOS 9.2 Simulator und Xcode 7.3/iOS 9.3 Device werden alle Zellen freigegeben. Nur ändern ist die Reihenfolge der Freigabe, die gelöschte Zelle wird zuletzt freigegeben.

    
HBu 19.01.2016 09:38
quelle