展开segue和委托之间的区别

我想知道是否有人可以解释在下面的示例中使用展开segue和使用委托之间的区别:

我有一个由朋友array填充的FriendsTableViewController和另一个AddFriendTableViewController其中包含一个将friend添加到FriendsTableViewController

这是我通过unwind segue从我的AddFriendViewController发送数据的方式:

 #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]; } } 

这是我使用unwind segue actionAddFriendTableViewController的数据添加到AddFriendTableViewController中的arrayFriendsTableViewController

 #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]; } } 

现在这可以按我的意愿工作,所以我希望我没有破坏任何stackoverflow规则或冒犯任何人,但我只是想知道我的示例代码的使用方式和是否使用自定义委托制作相同的方案之间的区别AddFriendViewController方法。 如果有人可以解释它会很棒!

使用展开segue与拥有委托非常相似,具有以下优点:

  • 您不需要实现任何解雇逻辑
  • 您无需在导航堆栈中上下传递引用
  • 您不需要声明委托协议
  • 在你的应用程序中解开许多阶段是微不足道的

缺点是

  • 取决于使用故事板(可能妨碍可重用性)
  • 如果它们中有很多,它可能导致与prepareForSegue相同的混乱,其中包含许多标识符名称的分支
  • 如果您决定通过其他方法(而不是segue)呈现视图控制器,那么您无法从中退出

你的代码看起来不错。 我坚持下去。