¿Cuándo debo ir por el bloque? ¿Cuándo debo ir para delegar en iOS?

Comenzaré por dar un ejemplo primero.

1. Estoy creando una vista, que tiene 10 elementos, a saber, botones, imágenes, control deslizante.
2. Cada elemento tiene una acción.
3. Cada elemento de vista tiene un identificador, 1-10, para los 10 elementos.
4. Cuando se toca un elemento (botón / imagen), o se cambia el valor (control deslizante), tengo que decirle al servidor o hacer una tarea.

Entonces qué hago:
Delegue la acción del botón a un controlador, con el identificador.
Use un bloque para hacer una llamada al servidor y hacer algo al finalizar.

Bloques de una manera utilizada para tareas de longitud finita o tarea que sabe que sucederá. P.ej. Enumeración de objetos, clasificación, llamada a una API y hacer algo en caso de éxito / fracaso.

Un caso más es notificar a alguien que algo sucedió. Puede usar la observación o delegación de valores clave para eso. Si bien también puede usar bloques, la notificación generalmente es de uno a muchos o puede convertirse en uno a muchos en el futuro. Así que no uses bloque aquí. Programación a prueba de futuro, por lo que nadie dice quién hizo esta mierda :).

Tampoco debes encadenar muchos bloques como dijo Hwee-Boon Yar. Encadenar bloques es fácil y útil, pero puede ser igualmente peligroso si no se maneja bien.

Supongo que esto es para tus propias clases.

También agregaré un punto sobre NSNotification (s): en su lugar, usaré notificaciones cuando haya más de 1 objetivo. De lo contrario, bloques o delegados.

Use bloques cuando hay como máximo 2, quizás 3 bloques. Por ejemplo, éxito, fracaso, desconocido. Si termina necesitando 10 bloques, definitivamente desea usar un delegado, ya que también podrían pertenecer a una clase separada (por ejemplo, común al implementar UITableViewDelegate).

  • U siempre puede usar block en lugar de Delegate. Pero los delegados generalmente se mantienen cuando cualquier clase personalizada tiene muchos tipos de salida dependiendo de su caso de uso.
  • Donde los bloques generalmente se mantienen para la salida de éxito / falla y el objeto resultante.
  • Hoy en día, la mayoría de las bibliotecas se crean utilizando bloques, ya que hacen que el código sea más legible y rápido.