Establecer UITextFieldDelegate y liberar después de UITextField dealloc, autónomo

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?

preguntado el 22 de mayo de 12 a las 18:05

1 Respuestas

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

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

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.