Questions d'entretien pour développeur mobile junior (iOS) : Guide complet

Milad Bonakdar
Auteur
Maîtrisez les fondamentaux du développement iOS avec des questions d'entretien essentielles couvrant Swift, UIKit, SwiftUI, la persistance des données et l'architecture des applications iOS pour les développeurs juniors.
Introduction
Le développement iOS est devenu l'une des compétences les plus recherchées dans le développement d'applications mobiles. Avec Swift comme langage principal et des frameworks puissants comme UIKit et SwiftUI, les développeurs iOS créent des expériences pour des millions d'utilisateurs dans le monde entier.
Ce guide couvre les questions d'entretien essentielles pour les développeurs iOS débutants. Nous explorons les fondamentaux de Swift, le développement d'interfaces utilisateur, la persistance des données, la mise en réseau et les meilleures pratiques iOS pour vous aider à vous préparer à votre premier rôle de développeur iOS.
Fondamentaux de Swift (6 Questions)
1. Quelle est la différence entre var et let en Swift ?
Réponse :
var: Déclare une variable mutable. Sa valeur peut être modifiée après l'initialisation.let: Déclare une constante immuable. Une fois définie, sa valeur ne peut plus être modifiée.- Bonne pratique : Utilisez
letpar défaut pour la sécurité et la clarté. N'utilisezvarque lorsque vous savez que la valeur changera.
Rareté : Très courant Difficulté : Facile
2. Expliquez les Optionnels en Swift. Qu'est-ce que le "Optional Binding" ?
Réponse :
Les optionnels représentent une valeur qui peut être nil (absence de valeur).
- Déclaration : Utilisez
?après le type :var name: String? - Méthodes de déballage :
- Déballage forcé :
name!(dangereux, plante si nil) - Optional Binding : Déballage sécurisé en utilisant
if letouguard let - Nil Coalescing :
name ?? "Default" - Optional Chaining :
user?.address?.city
- Déballage forcé :
Rareté : Très courant Difficulté : Facile
3. Quelle est la différence entre une class et une struct en Swift ?
Réponse :
- Class : Type de référence (stocké sur le tas). Prend en charge l'héritage. Passé par référence.
- Struct : Type de valeur (stocké sur la pile). Pas d'héritage. Passé par copie.
- Quand utiliser :
- Struct : Pour les modèles de données simples, lorsque vous voulez une sémantique de valeur (copies indépendantes)
- Class : Lorsque vous avez besoin d'héritage, de sémantique de référence ou de désinitialiseurs
Rareté : Très courant Difficulté : Moyenne
4. Que sont les Closures en Swift ?
Réponse : Les closures sont des blocs de fonctionnalités autonomes qui peuvent être transmis et utilisés dans votre code. Elles sont similaires aux lambdas ou aux fonctions anonymes dans d'autres langages.
- Syntaxe :
{ (parameters) -> ReturnType in statements } - Capture de valeurs : Les closures peuvent capturer et stocker des références aux variables de leur contexte environnant.
- Utilisation courante : Gestionnaires de complétion, rappels, opérations de tableau.
Rareté : Très courant Difficulté : Moyenne
5. Expliquez la différence entre les références weak et unowned.
Réponse : Les deux sont utilisés pour empêcher les cycles de rétention (fuites de mémoire) dans les types de référence.
weak: Référence optionnelle qui devient automatiquementnillorsque l'objet référencé est désalloué. Utilisez-la lorsque la référence pourrait survivre à l'objet.unowned: Référence non optionnelle qui suppose que l'objet existera toujours. Plante si elle est accédée après la désallocation. Utilisez-la lorsque vous êtes certain que la référence ne survivra pas à l'objet.
Rareté : Courant Difficulté : Moyenne
6. Que sont les Protocoles en Swift ?
Réponse : Les protocoles définissent un modèle de méthodes, de propriétés et d'autres exigences qui conviennent à une tâche ou à une fonctionnalité particulière. Les classes, les structures et les énumérations peuvent adopter des protocoles.
- Similaire à : Les interfaces dans d'autres langages
- Extensions de protocole : Peut fournir des implémentations par défaut
- Programmation orientée protocole : Le paradigme préféré de Swift
Rareté : Très courant Difficulté : Facile
Bases de UIKit (5 Questions)
7. Quelle est la différence entre UIView et UIViewController ?
Réponse :
UIView: Représente une zone rectangulaire à l'écran. Gère le dessin et la gestion des événements. Exemples :UILabel,UIButton,UIImageView.UIViewController: Gère une hiérarchie de vues. Gère le cycle de vie de la vue, les interactions de l'utilisateur et la navigation. Contient une vue racine et gère ses sous-vues.- Relation : Un contrôleur de vue gère les vues. Un contrôleur de vue peut avoir de nombreuses vues.
Rareté : Très courant Difficulté : Facile
8. Expliquez les méthodes du cycle de vie du contrôleur de vue.
Réponse : Les contrôleurs de vue ont des méthodes de cycle de vie spécifiques appelées dans l'ordre :
viewDidLoad(): Appelé une fois lorsque la vue est chargée en mémoire. Configuration qui doit avoir lieu une seule fois.viewWillAppear(_:): Appelé avant que la vue n'apparaisse à l'écran. Peut être appelé plusieurs fois.viewDidAppear(_:): Appelé après que la vue est apparue à l'écran. Démarrez les animations ici.viewWillDisappear(_:): Appelé avant que la vue ne disparaisse.viewDidDisappear(_:): Appelé après que la vue a disparu. Nettoyez les ressources.
Rareté : Très courant Difficulté : Facile
9. Qu'est-ce que l'Auto Layout et comment utilisez-vous les contraintes ?
Réponse : L'Auto Layout est un système de mise en page basé sur des contraintes qui vous permet de créer des interfaces utilisateur adaptatives qui fonctionnent sur différentes tailles d'écran et orientations.
- Contraintes : Définissent les relations entre les vues (largeur, hauteur, espacement, alignement)
- Méthodes :
- Interface Builder : Éditeur visuel dans Xcode
- Programmatic : API NSLayoutConstraint ou NSLayoutAnchor
- Visual Format Language : Basé sur des chaînes (moins courant maintenant)
Rareté : Très courant Difficulté : Moyenne
10. Quelle est la différence entre frame et bounds ?
Réponse :
frame: L'emplacement et la taille de la vue dans le système de coordonnées de sa supervue. Utilisé pour positionner la vue.bounds: L'emplacement et la taille de la vue dans son propre système de coordonnées. L'origine est généralement (0, 0). Utilisé pour dessiner du contenu à l'intérieur de la vue.- Différence clé :
frameest relatif au parent,boundsest relatif à lui-même.
Rareté : Courant Difficulté : Moyenne
11. Comment gérez-vous la saisie de l'utilisateur à partir d'un UITextField ?
Réponse : Plusieurs approches existent :
- Target-Action : Ajouter une cible pour l'événement
.editingChanged - Delegate : Se conformer au protocole
UITextFieldDelegate - Combine : Utiliser des éditeurs (approche moderne)
Rareté : Très courant Difficulté : Facile
Bases de SwiftUI (4 Questions)
12. Qu'est-ce que SwiftUI et en quoi est-il différent de UIKit ?
Réponse : SwiftUI est le framework d'interface utilisateur déclaratif d'Apple introduit dans iOS 13.
- UIKit : Impératif (vous dites au système comment construire l'interface utilisateur étape par étape). Mature, largement utilisé.
- SwiftUI : Déclaratif (vous décrivez à quoi devrait ressembler l'interface utilisateur). Moderne, moins de code, mises à jour automatiques.
- Principales caractéristiques :
- Aperçu en direct dans Xcode
- Multiplateforme (iOS, macOS, watchOS, tvOS)
- Mises à jour de l'interface utilisateur basées sur l'état
- Animations intégrées
Rareté : Très courant Difficulté : Facile
13. Expliquez @State, @Binding et @ObservedObject dans SwiftUI.
Réponse : Ce sont des wrappers de propriétés pour gérer l'état dans SwiftUI :
@State: État privé possédé par la vue. Lorsqu'il change, la vue est rendue à nouveau.@Binding: Crée une connexion bidirectionnelle à une propriété@Stateappartenant à une vue parente.@ObservedObject: Référence un objet externe (classe se conformant àObservableObject). La vue se met à jour lorsque les propriétés@Publishedde l'objet changent.
Rareté : Courant Difficulté : Moyenne
14. Comment créez-vous une liste dans SwiftUI ?
Réponse :
Utilisez la vue List pour afficher des collections de données défilables.
Rareté : Courant Difficulté : Facile
15. Que sont les Modificateurs de Vue dans SwiftUI ?
Réponse : Les modificateurs de vue sont des méthodes qui créent une nouvelle vue avec des propriétés modifiées. Ils sont chaînables.
- Modificateurs courants :
.padding(),.background(),.foregroundColor(),.font(),.frame() - L'ordre compte : Les modificateurs sont appliqués en séquence
Rareté : Courant Difficulté : Facile
Données et Réseau (5 Questions)
16. Comment faites-vous une requête réseau dans iOS ?
Réponse :
Utilisez URLSession pour les tâches de mise en réseau.
Rareté : Très courant Difficulté : Moyenne
17. Qu'est-ce que Codable en Swift ?
Réponse :
Codable est un alias de type pour les protocoles Encodable & Decodable. Il permet une conversion facile entre les types Swift et les représentations externes comme JSON.
- Synthèse automatique : Swift génère automatiquement le code d'encodage/décodage si toutes les propriétés sont Codable.
- Clés personnalisées : Utilisez l'énumération
CodingKeyspour mapper différents noms de propriétés.
Rareté : Très courant Difficulté : Facile
18. Comment persistez-vous les données localement dans iOS ?
Réponse : Plusieurs options pour la persistance des données locales :
- UserDefaults : Stockage clé-valeur simple pour de petites quantités de données (paramètres, préférences)
- Système de fichiers : Enregistrer les fichiers dans le répertoire Documents ou Cache
- Core Data : Le framework d'Apple pour la gestion et la persistance des graphes d'objets
- SQLite : Base de données relationnelle
- Keychain : Stockage sécurisé pour les données sensibles (mots de passe, jetons)
Rareté : Très courant Difficulté : Facile
19. Quelle est la différence entre les opérations synchrones et asynchrones ?
Réponse :
- Synchrone : Bloque le thread courant jusqu'à ce que l'opération soit terminée. Peut geler l'interface utilisateur si elle est exécutée sur le thread principal.
- Asynchrone : Ne bloque pas le thread. L'opération s'exécute en arrière-plan, et un gestionnaire de complétion est appelé une fois terminée.
- Thread principal : Les mises à jour de l'interface utilisateur doivent se produire sur le thread principal. Utilisez
DispatchQueue.main.asyncpour passer au thread principal.
Rareté : Courant Difficulté : Facile
20. Qu'est-ce que Grand Central Dispatch (GCD) ?
Réponse : GCD est l'API de bas niveau d'Apple pour la gestion des opérations concurrentes.
- Dispatch Queues : Files d'attente FIFO qui exécutent des tâches en série ou en concurrence
- Main Queue : File d'attente série pour les mises à jour de l'interface utilisateur
- Global Queues : Files d'attente concurrentes avec différentes priorités (arrière-plan, utilitaire, initié par l'utilisateur)
Rareté : Courant Difficulté : Moyenne



