ios - programming - swift manual
Swift: cómo solucionar el problema donde la variable débil del tipo ''protocolo'' es ilegal (1)
Hacer que una clase de protocolo se vincule con : class
simplemente le dice al compilador que solo puede representar un tipo de referencia y, por lo tanto, puede usar el atributo weak
en él.
Si no marca un protocolo como de clase limitada, Swift asumirá que podría estar representando un tipo de referencia o de valor. Como ARC (recuento automático de referencias ) solo funciona con referencias, y no con valores, entonces el compilador impedirá que pueda poner el atributo weak
en él.
La razón por la que ARC no funciona con los tipos de valores es porque se copian cuando los pasas, en lugar de pasarse por referencia. Por lo tanto, su memoria puede administrarse fácilmente, ya que su duración es muy predecible, a diferencia de los tipos de referencia.
Para los tipos de referencia, si está utilizando un patrón de delegado, el delegate
siempre debe ser weak
para evitar retener ciclos, y por lo tanto, el protocolo siempre debe estar vinculado a la clase. Usar un tipo de valor para un delegado no tiene sentido, ya que siempre se referirá a una copia de lo que le asignó.
Después de leer algunas publicaciones aquí sobre este tema, descubrí que mi protocolo debería heredar de ''clase'' para que ''débil'' funcione en mi variable de delegado.
''débil'' solo se puede aplicar a tipos de protocolo de clase o clase.
Si mi protocolo no hereda de ''clase'', ¿''infiere'' rápidamente que debería ser débil?
¿Es esta la manera de facto de emitir una variable de tipo ''protocolo'' a débil?
Qué sucede en términos de gestión de la memoria
protocol FacebookLoginViewControllerDelegate: class {
func facebookLoginViewControllerDidLogin(controller: FacebookLoginViewController)
}
class FacebookLoginViewController: UIViewController {
weak var delegate: FacebookLoginViewControllerDelegate?
}