Diferencia entre separar segue y delegación

Me pregunto si alguien puede explicar la diferencia entre usar un segue desenrollar y usar delegación en el ejemplo que tengo a continuación:

Tengo un FriendsTableViewController poblado por una array de amigos y otro AddFriendTableViewController con una function para agregar un friend al FriendsTableViewController .

Así es como envío los datos de mi AddFriendViewController con un unwind segue :

 #pragma mark - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // Check whether the Done button was tapped. // If it wasn't, instead of saving the friend, the method returns without doing anything else. if (sender != self.doneButton) return; // See whether there's text in the text field. if (self.nameTextField.text.length > 0) { // If there's text, create a new friend and give it's properties the input from the text fields. self.friend = [[Friend alloc] initWithName:self.nameTextField.text dateOfBirth:self.birthdayDatePicker.date numberOfGifts:0]; } } 

Así es como agrego los datos del AddFriendTableViewController a la array en FriendsTableViewController con la unwind segue action :

 #pragma mark - Actions - (IBAction)unwindSegue:(UIStoryboardSegue *)segue { // Retrieve the source view controller, the controller that is unwinding from. AddFriendTableViewController *soruce = [segue sourceViewController]; // Retrieve the soruce view controller's friend object. Friend *friend = soruce.friend; // See whether the item exists. // If it's nil, either the Cancel button closed the screen or the text field had no text, so you don't want to save the item. if (friend != nil) { // If it does exist, add the item to the friends array. [self.friends addObject:friend]; // Reload the data in the table. [self.tableView reloadData]; } } 

Ahora esto funciona como quiero, así que espero no romper ninguna regla de stackoverflow ni ofender a nadie, pero solo quería saber cuál es la diferencia entre la forma en que se usa mi código de ejemplo y si se realizó el mismo escenario, pero con un delegado personalizado methods para AddFriendViewController . ¡Si alguno puede explicar, sería genial!

Usar segue desenrollar es muy similar a tener un delegado, con las siguientes ventajas:

  • No es necesario implementar ninguna lógica de rechazo.
  • No necesita pasar references arriba y abajo de la stack de navigation
  • No necesita declarar un protocolo de delegado
  • Es trivial desconectar una serie de etapas de tu aplicación.

Las desventajas son

  • Depende de utilizar storyboards (que pueden obstaculizar la reutilización)
  • Si hay muchos de ellos, puede llevar a la misma confusión que se puede get en prepareForSegue con muchos nombres de identificador de bifurcación
  • Si decide presentar el controller de vista a través de algún otro método (no un segue), entonces no puede desconectarse de él

El código que tienes se ve bien. Me quedo con eso