¿Mi aplicación falla cuando paso un UITableViewCell como AnyObject? a otra function

Ya sé la solución para mi problema, pero realmente no entiendo lo que está pasando aquí. Tengo un UITableViewController que toma la celda en didSelectRow y la usa para algo en otra function. ¿Paso la celda como AnyObject? . Ahora cuando profundizo en un detalle de VC y vuelvo a hacer una copy de security, repite esos pasos 2 veces más, mi aplicación falla.

Primero pensé que era un problema en algún otro lugar de mi aplicación, pero luego creé un proyecto de muestra con nada más que esas pocas líneas y logré reproducir el error. También archivé un radar, pero no quiero morir tirado (ya que nunca escuchas de vuelta a esos types de radar);) ¿Alguien puede explicarme lo que está pasando aquí?

 final class MasterViewController: UITableViewController { override func numberOfSections(in tableView: UITableView) -> Int { return 1 } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 1 } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) return cell } override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { tableView.deselectRow(at: indexPath, animated: true) let cell = tableView.cellForRow(at: indexPath) doSomethingWith(sender: cell) } } extension MasterViewController { func doSomethingWith(sender: AnyObject?) { // I don't even use that sender!!! // If the function would read doSomethingWith(sender: Any?) everything would be ok! } } 

Si lo desea, puede download la muestra completa en: http://www.georgbachmann.com/demo/CrashTest.zip

¡Realmente me gustaría saber qué está haciendo el rápido comstackdor allí!

::EDITAR::

Acabo de notar que el crash también depende de doSomethingWith: estar en una extensión!

Básicamente, no "posee" las celdas reutilizables. UITableView posee. Como pasas la misma celda tres veces a la function con una fuerte reference (escribiste, ya sabes la solución, así que la omito), aumentas el recuento de references de la celda (en este caso, ser +3, pero no importa). En algún momento, UITableView decide lanzar sus celdas, pero su UIViewController tiene una fuerte reference a ellas. En este punto, la aplicación se bloquea. No hay ningún error aquí: nunca debes pasar objects que no tienes.