prepareForSegue y delegados

Tengo una aplicación con dos segues. En uno de los segmentos, el controlador de vista actual se convierte en delegado y el otro no.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"MoreOptions"]) {
        UINavigationController *navigationController = segue.destinationViewController;
        MoreOptionsViewController *controller = (MoreOptionsViewController *)navigationController.topViewController;
        controller.delegate = self;
    } else if ([segue.identifier isEqualToString:@"FullStoryView"]) {
        SingleStoryViewController *detailViewController = segue.destinationViewController;
        detailViewController.urlObject = sender;
    }
}

Todo esto funciona bien, pero me gustaría intentar entender mejor el código. Lo que no entiendo es que tengo que obtener una referencia al MoreOptionsViewController tomándolo de navigationController.topViewController en lugar de simplemente obtenerlo de segue.destinationViewController como lo hago en la segunda condición if. ¿Es porque estoy configurando el controlador de vista actual (self) como delegado? Nuevamente, no estoy tratando de resolver un problema, solo estoy tratando de comprender mejor lo que está sucediendo.

Respuestas a la pregunta(4)

Su respuesta a la pregunta