Establecer UITextFieldDelegate y liberar después de UITextField dealloc, autónomo
Frecuentes
Visto 447 veces
1
He creado una clase que implementa UITextFieldDelegate
así que solo necesito usar [MyDelegateClass setDelegate:textField someConfigparams:...]
para usarlo. Dentro creará un objeto y lo asignará al textFieldDelegate
.
El problema aparece al soltar: el setDelegate
método en UITextField
no retiene el objeto, así que no puedo liberarlo automáticamente. Podría mantener una referencia externa para publicarla, pero es fea y propensa a errores, ya que necesito hacer un trabajo adicional fuera de la clase de delegado. Subclasificación UITextField
es una mala opción ya que necesitaría usar siempre esta subclase que podría entrar en conflicto con otras.
¿Hay alguna manera de que pueda liberar el objeto delegado cuando UITextField
el objeto se destruye sin depender del código fuera de MyDelegateClass?
1 Respuestas
0
Supongo que [MyDelegateClass setDelegate:textField someConfigparams:...] crea una instancia de MyDelegateClass y asigna esa instancia como delegado en el campo de texto proporcionado. Lo que haría sería convertir la instancia de MyDelegateClass en un único, lo que significa que solo hay una instancia.
Básicamente, lo que sucederá en este caso es que MyDelegateClass conservará una fuerte referencia a una única instancia estática de sí misma y esa instancia permanecerá activa mientras su aplicación permanezca activa o hasta que la libere a propósito. Está perfectamente bien que una instancia de un objeto sea el delegado de muchos campos de texto. El impacto en la memoria de tener siempre viva una única instancia de esta clase será constante, es decir, no crecerá y será muy pequeño.
contestado el 22 de mayo de 12 a las 19:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas iphone objective-c ios ipad delegates or haz tu propia pregunta.
Sí, crea un nuevo objeto y lo asigna como delegado. El problema con esto son los "configParameters" que modifican el comportamiento del objeto, por lo que un singleton no es una opción ya que cada instancia es diferente. - Luis
Modifique su objeto para manejar múltiples parámetros de configuración según el campo de texto pasado. Puede usar un diccionario y almacenar los parámetros de configuración según la etiqueta de campos de texto. Esto evitaría un posible ciclo de retención y aún le permitiría personalizar el comportamiento del delegado por campo de texto. - Dave.B
Sería más o menos lo mismo ya que estos parámetros de configuración no se publicarían y no sabría cuándo publicarlos. Sería mover el problema de un lugar a otro pero no resolverlo, agregando cierta complejidad y cierta capacidad de reutilización. - Luis