Preguntas para Entrevistas de Desarrollador Mobile Junior (iOS): Guía Completa

Milad Bonakdar
Autor
Domina los fundamentos del desarrollo de iOS con preguntas esenciales para entrevistas que cubren Swift, UIKit, SwiftUI, persistencia de datos y la arquitectura de aplicaciones iOS para desarrolladores junior.
Introducción
El desarrollo para iOS se ha convertido en una de las habilidades más buscadas en el desarrollo de aplicaciones móviles. Con Swift como lenguaje principal y potentes frameworks como UIKit y SwiftUI, los desarrolladores de iOS crean experiencias para millones de usuarios en todo el mundo.
Esta guía cubre preguntas esenciales para entrevistas de Desarrolladores iOS Junior. Exploramos los fundamentos de Swift, el desarrollo de la interfaz de usuario, la persistencia de datos, las redes y las mejores prácticas de iOS para ayudarte a prepararte para tu primer puesto como desarrollador de iOS.
Fundamentos de Swift (6 Preguntas)
1. ¿Cuál es la diferencia entre var y let en Swift?
Respuesta:
var: Declara una variable mutable. Su valor se puede cambiar después de la inicialización.let: Declara una constante inmutable. Una vez establecida, su valor no se puede cambiar.- Mejor práctica: Utiliza
letpor defecto para mayor seguridad y claridad. Solo usavarcuando sepas que el valor va a cambiar.
Frecuencia: Muy Común Dificultad: Fácil
2. Explica los Optionals en Swift. ¿Qué es el Optional Binding?
Respuesta:
Los Optionals representan un valor que podría ser nil (ausencia de valor).
- Declaración: Usa
?después del tipo:var name: String? - Métodos de Desempaquetado:
- Force Unwrapping:
name!(peligroso, falla si es nil) - Optional Binding: Desempaqueta de forma segura usando
if letoguard let - Nil Coalescing:
name ?? "Default" - Optional Chaining:
user?.address?.city
- Force Unwrapping:
Frecuencia: Muy Común Dificultad: Fácil
3. ¿Cuál es la diferencia entre una class y una struct en Swift?
Respuesta:
- Class: Tipo de referencia (almacenado en el heap). Admite herencia. Se pasa por referencia.
- Struct: Tipo de valor (almacenado en la pila). No hay herencia. Se pasa por copia.
- Cuándo usar:
- Struct: Para modelos de datos simples, cuando se desean semánticas de valor (copias independientes)
- Class: Cuando se necesita herencia, semántica de referencia o desinicializadores
Frecuencia: Muy Común Dificultad: Media
4. ¿Qué son los Closures en Swift?
Respuesta: Los Closures son bloques de funcionalidad autocontenidos que se pueden pasar y usar en tu código. Son similares a las lambdas o funciones anónimas en otros lenguajes.
- Sintaxis:
{ (parámetros) -> TipoDeRetorno in sentencias } - Captura de Valores: Los Closures pueden capturar y almacenar referencias a variables de su contexto circundante.
- Uso Común: Completion handlers, callbacks, operaciones de array.
Frecuencia: Muy Común Dificultad: Media
5. Explica la diferencia entre referencias weak y unowned.
Respuesta: Ambas se utilizan para prevenir ciclos de retención (fugas de memoria) en tipos de referencia.
weak: Referencia opcional que automáticamente se convierte ennilcuando el objeto referenciado se desasigna. Úsala cuando la referencia pueda sobrevivir al objeto.unowned: Referencia no opcional que asume que el objeto siempre existirá. Falla si se accede a ella después de la desasignación. Úsala cuando estés seguro de que la referencia no sobrevivirá al objeto.
Frecuencia: Común Dificultad: Media
6. ¿Qué son los Protocolos en Swift?
Respuesta: Los protocolos definen un esquema de métodos, propiedades y otros requisitos que se adaptan a una tarea o funcionalidad particular. Las clases, structs y enums pueden adoptar protocolos.
- Similar a: Interfaces en otros lenguajes
- Extensiones de Protocolo: Pueden proporcionar implementaciones predeterminadas
- Programación Orientada a Protocolos: El paradigma preferido de Swift
Frecuencia: Muy Común Dificultad: Fácil
Fundamentos de UIKit (5 Preguntas)
7. ¿Cuál es la diferencia entre UIView y UIViewController?
Respuesta:
UIView: Representa un área rectangular en la pantalla. Maneja el dibujo y el manejo de eventos. Ejemplos:UILabel,UIButton,UIImageView.UIViewController: Gestiona una jerarquía de vistas. Maneja el ciclo de vida de la vista, las interacciones del usuario y la navegación. Contiene una vista raíz y gestiona sus subvistas.- Relación: Un controlador de vista gestiona vistas. Un controlador de vista puede tener muchas vistas.
Frecuencia: Muy Común Dificultad: Fácil
8. Explica los métodos del ciclo de vida del Controlador de Vista.
Respuesta: Los controladores de vista tienen métodos de ciclo de vida específicos que se llaman en orden:
viewDidLoad(): Se llama una vez cuando la vista se carga en la memoria. Configuración que debe ocurrir una vez.viewWillAppear(_:): Se llama antes de que la vista aparezca en la pantalla. Se puede llamar varias veces.viewDidAppear(_:): Se llama después de que la vista aparece en la pantalla. Comienza las animaciones aquí.viewWillDisappear(_:): Se llama antes de que la vista desaparezca.viewDidDisappear(_:): Se llama después de que la vista desaparece. Limpia los recursos.
Frecuencia: Muy Común Dificultad: Fácil
9. ¿Qué es Auto Layout y cómo usas las constraints?
Respuesta: Auto Layout es un sistema de diseño basado en constraints que te permite crear interfaces de usuario adaptables que funcionan en diferentes tamaños y orientaciones de pantalla.
- Constraints: Definen las relaciones entre las vistas (ancho, alto, espacio, alineación)
- Métodos:
- Interface Builder: Editor visual en Xcode
- Programático: API NSLayoutConstraint o NSLayoutAnchor
- Visual Format Language: Basado en cadenas (menos común ahora)
Frecuencia: Muy Común Dificultad: Media
10. ¿Cuál es la diferencia entre frame y bounds?
Respuesta:
frame: La ubicación y el tamaño de la vista en el sistema de coordenadas de su supervista. Se utiliza para posicionar la vista.bounds: La ubicación y el tamaño de la vista en su propio sistema de coordenadas. El origen suele ser (0, 0). Se utiliza para dibujar contenido dentro de la vista.- Diferencia clave:
framees relativo al padre,boundses relativo a sí mismo.
Frecuencia: Común Dificultad: Media
11. ¿Cómo manejas la entrada del usuario desde un UITextField?
Respuesta: Existen múltiples enfoques:
- Target-Action: Agregar target para el evento
.editingChanged - Delegate: Conformar al protocolo
UITextFieldDelegate - Combine: Usar publishers (enfoque moderno)
Frecuencia: Muy Común Dificultad: Fácil
Fundamentos de SwiftUI (4 Preguntas)
12. ¿Qué es SwiftUI y en qué se diferencia de UIKit?
Respuesta: SwiftUI es el framework de interfaz de usuario declarativo de Apple introducido en iOS 13.
- UIKit: Imperativo (le dices al sistema cómo construir la interfaz de usuario paso a paso). Maduro, ampliamente utilizado.
- SwiftUI: Declarativo (describes cómo debería ser la interfaz de usuario). Moderno, menos código, actualizaciones automáticas.
- Características clave:
- Vista previa en vivo en Xcode
- Multiplataforma (iOS, macOS, watchOS, tvOS)
- Actualizaciones de la interfaz de usuario basadas en el estado
- Animaciones integradas
Frecuencia: Muy Común Dificultad: Fácil
13. Explica @State, @Binding y @ObservedObject en SwiftUI.
Respuesta: Estos son property wrappers para administrar el estado en SwiftUI:
@State: Estado privado propiedad de la vista. Cuando cambia, la vista se vuelve a renderizar.@Binding: Crea una conexión bidireccional a una propiedad@Statepropiedad de una vista principal.@ObservedObject: Hace referencia a un objeto externo (clase que se ajusta aObservableObject). La vista se actualiza cuando cambian las propiedades@Publisheddel objeto.
Frecuencia: Común Dificultad: Media
14. ¿Cómo se crea una lista en SwiftUI?
Respuesta:
Usa la vista List para mostrar colecciones de datos desplazables.
Frecuencia: Común Dificultad: Fácil
15. ¿Qué son los Modificadores de Vista en SwiftUI?
Respuesta: Los modificadores de vista son métodos que crean una nueva vista con propiedades modificadas. Son encadenables.
- Modificadores comunes:
.padding(),.background(),.foregroundColor(),.font(),.frame() - El orden importa: Los modificadores se aplican en secuencia
Frecuencia: Común Dificultad: Fácil
Datos y Redes (5 Preguntas)
16. ¿Cómo realizas una solicitud de red en iOS?
Respuesta:
Usa URLSession para tareas de red.
Frecuencia: Muy Común Dificultad: Media
17. ¿Qué es Codable en Swift?
Respuesta:
Codable es un alias de tipo para los protocolos Encodable & Decodable. Permite una fácil conversión entre tipos de Swift y representaciones externas como JSON.
- Síntesis automática: Swift genera automáticamente código de codificación/decodificación si todas las propiedades son Codable.
- Claves personalizadas: Usa el enum
CodingKeyspara mapear diferentes nombres de propiedad.
Frecuencia: Muy Común Dificultad: Fácil
18. ¿Cómo persistes datos localmente en iOS?
Respuesta: Múltiples opciones para la persistencia de datos local:
- UserDefaults: Almacenamiento simple de clave-valor para pequeñas cantidades de datos (configuraciones, preferencias)
- Sistema de archivos: Guarda archivos en el directorio Documents o Cache
- Core Data: El framework de Apple para la gestión y persistencia de gráficos de objetos
- SQLite: Base de datos relacional
- Keychain: Almacenamiento seguro para datos confidenciales (contraseñas, tokens)
Frecuencia: Muy Común Dificultad: Fácil
19. ¿Cuál es la diferencia entre operaciones síncronas y asíncronas?
Respuesta:
- Síncrono: Bloquea el hilo actual hasta que se completa la operación. Puede congelar la interfaz de usuario si se ejecuta en el hilo principal.
- Asíncrono: No bloquea el hilo. La operación se ejecuta en segundo plano y se llama a un completion handler cuando termina.
- Hilo principal: Las actualizaciones de la interfaz de usuario deben realizarse en el hilo principal. Usa
DispatchQueue.main.asyncpara cambiar al hilo principal.
Frecuencia: Común Dificultad: Fácil
20. ¿Qué es Grand Central Dispatch (GCD)?
Respuesta: GCD es la API de bajo nivel de Apple para gestionar operaciones concurrentes.
- Dispatch Queues: Colas FIFO que ejecutan tareas en serie o concurrentemente
- Main Queue: Cola en serie para actualizaciones de la interfaz de usuario
- Global Queues: Colas concurrentes con diferentes prioridades (background, utility, userInitiated)
Frecuencia: Común Dificultad: Media


