Diferencias entre presentViewController y performSegueWithIdentifier

Esta es una especie de pregunta conceptual (no tratar de resolver un problema en particular sino entender mejor) que encontré.

IBOutlets en los controlleres de vista son variables "forzosamente IBOutlets " por defecto y no sé exactamente por qué, pero me dice que iOS espera que cada uno de ellos se inicialice cuando se invoca el VC.

Tengo un controller de vista A y dos otros B y C Tengo un oyente de clic en un button personalizado mío en A que, dependiendo de cierta variable, decide después del clic si B o C serán llamados.

Intenté implementar esto con presentViewController pero por alguna razón mi progtwig se bloqueó en time de ejecución debido a salidas no inicializadas en B o C

Sin embargo, nombré por segues e intenté lo mismo con performSegueWithIdentifier y simplemente funcionó.

Quiero saber, ¿cuáles son todas las diferencias entre ellos y es todo lo que dije que sé correcto?

Gracias por adelantado