segue

It's much more convenient to prepareForSegue where you performSegue.

typedef void (^PrepareForSegueBlock)(UIStoryboardSegue *);  

...

- (void)viewThatThing:(Thing *)aThing {
  [self performSegueWithIdentifier:@"Thing" sender:^(UIStoryboardSegue *segue) {
    ThingViewController *thingViewController = (id)segue.destinationViewController;
    thingViewController.theThing = aThing;
    thingViewController.delegate = self;
    ...
  }];
}

...

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
  ((PrepareForSegueBlock)sender)(segue);
}