Ambos tienen sus propias ventajas y desventajas.
Usando XIBs
Ventajas:
-Puedes armar rápidamente una UI
-Implementación directa para aplicaciones pequeñas con un número mínimo de pantallas
-Puedes tener XIBs separados para diferentes localizaciones (es decir, idiomas o países)
-Grandioso en la disposición de elementos y en la detección visual de desalineaciones. Es fácil hacer un ligero ajuste en la disposición
Desventajas:
Es difícil fusionar conflictos cuando se trabaja en un entorno de equipo (difícil de dif, fusionar y leer)
-Las vistas muy dinámicas son imposibles de describir como un XIB
En cuanto al rendimiento, es más lento que crear vistas a través de código porque el XIB necesita ser leído desde el disco y analizado/parseado
Los XIBs carecen de las personalizaciones que puedes hacer en código como las cosas de Quartz (drop shadows, round corners)
-Difícil de depurar (ie. si te olvidas de hacer una conexión en Interface Builder o haces una conexión incorrecta)
Tarjetas de historia
Ventajas:
- Las tablas de historia son agradables para las aplicaciones con una pequeña o mediana cantidad de pantallas y los requisitos para la navegación son relativamente sencillos entre las vistas
- Puedes maquetar el flujo de una aplicación sin escribir mucho, o nada, de código
- Crea segues entre los controladores de vista y navega por ellos.
- Puedes crear el flujo de navegación completo sin escribir ni una sola línea de código
Desventajas:
- Los Storyboards no son compatibles con los sistemas anteriores a iOS 5 por lo que el soporte de iOS 4.3 imposible
- Es difícil trabajar en paralelo en un entorno de equipo porque todo el mundo está modificando el mismo archivo
- En la misma línea, la fusión de storyboards en conflicto en GIT será un dolor
- La gente ha experimentado errores en XCode con el uso de storyboards (por ejemplo, tener que vaciar con frecuencia la carpeta DerivedData debido a las inconsistencias)