La diferencia entre bloques y delegados de ios
Los métodos en Block y Delegate pueden entenderse como funciones de devolución de llamada, que obtienen y ejecutan fragmentos de código cuando ocurre una determinada situación.
2. Bloque (bloque de código)
Ventajas: Es una devolución de llamada liviana y puede acceder directamente al contexto. El lugar donde se utilizan los bloques y el lugar donde se implementan los bloques están en el mismo lugar, lo que hace que la organización del código sea más coherente.
3. Representante (agente)
Esta es una devolución de llamada relativamente pesada.
Desventajas:
Debido a la declaración del método. separado de la implementación, por lo que la coherencia del código no es muy buena
Los agentes a menudo necesitan almacenar algunos datos temporales.
Ventajas:
La función de devolución de llamada del agente puede ser un conjunto de múltiples funciones y se pueden llamar diferentes funciones de devolución de llamada en diferentes momentos.
4. Cómo elegir cuál usar
1. Cuando hay más de tres funciones de devolución de llamada, el proxy es mejor.
2. El uso de bloques de código puede provocar fácilmente referencias circulares, pero los agentes no tendrán este problema.
3. En otros casos, los bloques de código tienen prioridad.
Existen tres tipos de bloques:
Temporales, solo se utilizan en la pila y no se almacenan.
Por ejemplo, en el recorrido foreach de una matriz, los bloques utilizados por este recorrido son temporales y no se almacenarán.
Es necesario almacenarlo, pero solo se llamará una vez o habrá un período de finalización.
Por ejemplo, en una animación de UIView, una vez completada la animación, se debe usar un bloque para notificar al exterior. Una vez llamado el bloque, se puede eliminar.
Debe almacenarse y puede llamarse varias veces.
Por ejemplo, si el evento de clic de un botón se implementa mediante un bloque, debe almacenarse durante mucho tiempo y se llamará varias veces. Después de la llamada, el bloqueo no se puede eliminar, posiblemente al hacer clic en el siguiente botón.