Débil vs No propietario para delegates no facultativos.

Si mi control de visión debe inicializarse con un delegado, ¿hay algún peligro en absoluto para hacer uso de un propietario no propietario?

Usar débil parece introducir la probabilidad de que fallen las funciones (ver más abajo), aunque no se bloqueará.

¿Usar el no propietario en este caso no es seguro de todos modos?

class MyViewController: UIViewController private weak var delegate: MyViewControllerDelegate? init(delegate: MyViewControllerDelegat) { self.delegate = delegate } func foobar { delegate?? } 

comparado con

 class MyViewController: UIViewController private unowned var delegate: MyViewControllerDelegate init(delegate: MyViewControllerDelegate) { self.delegate = delegate } func foobar { delegate.doAction() } 

Si su controller debe inicializarse con un delegado y el controller no puede funcionar sin él, entonces la solución correcta es la no unowned . Sin embargo, debe asegurarse de que el delegado nunca se desasigne antes de que su controller sea desasignado. Normalmente, el delegado debe ser el propietario de su controller.

Sin embargo, usar weak tampoco es complicado:

 delegate?.doAction() 

La documentation de Apple dice

Use una reference débil siempre que sea válida para que esa reference se vuelva nula en algún momento de su vida. Por el contrario, utilice una reference no propietaria cuando sepa que la reference nunca será nula una vez que se haya establecido durante la initialization.

Entonces, en su caso, si sabe que el delegado estará allí durante toda la vida, entonces use unowned .

La diferencia entre weak y unowned es que débil puede ser nulo y no propietario no puede ser nulo. Ambos no se sumn al ciclo de retención y no hay peligro con los unowned siempre que no desasignes al delegado.