Pregunta

¡Hola!

Traté de usar un delegado en mi aplicación. Mi proyecto usa ARCO

enter image description here

Por ejemplo, tengo el protocolo x y dos objetos que lo usan. En objeto B Creé una instancia para el objeto A y establecer delegado self (a.delegate = self) en tiempo de ejecución invoco una devolución de llamada de método (en este punto mi objeto delegado es B). Después de eso, todos ejecutan el -Mostrar resultado método.

¿En qué punto se forma una referencia circular? Entiendo que este es un problema con el especificador fuerte, pero no entiendo a qué hora sucedió y cómo rastrearlo.

¡Gracias!

¿Fue útil?

Solución

Si dos objetos mantienen fuertes referencias entre sí (es decir, se conservan entre sí), pueden tener lo que se conoce como un "ciclo de retención" en sus manos. Ninguno de los objetos se desanimará porque el otro tiene una fuerte referencia a él (lo retiene), por lo que nunca renunciará a su referencia (liberación) del otro objeto.

Esta situación es común con los delegados, donde un objeto (llamarlo A) crea otro (b) y se establece como delegado de B. Si A tiene una sólida referencia a B para que B no se trate, y B también tiene una fuerte referencia a A, tiene un ciclo de referencia. Para evitar eso, es común que los objetos no retengan o mantengan referencias fuertes a sus delegados. Haga la referencia de B a un débil en lugar de fuerte y el problema desaparece.

Otros consejos

Parece que mantiene una fuerte referencia a A en B., ya sea que sea una referencia débil o, que es la práctica común, hace que el delegado sea una referencia débil. En el último caso, debe asegurarse de establecer A delegate a nil Antes de que B se trate.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top