J'évite normalement l'approche de conception qu'implique l'utilisation par Andrew du terme «cœur de votre application». Ce que je veux dire par là, c'est que je pense que vous devriez éviter de regrouper trop de choses dans un emplacement central - une bonne conception de programme implique normalement de séparer les fonctionnalités par «domaine de préoccupation».
Un objet délégué est un objet qui est notifié lorsque l'objet auquel il est connecté atteint certains événements ou états. Dans ce cas, le délégué d'application est un objet qui reçoit des notifications lorsque l'objet UIApplication atteint certains états. À bien des égards, il s'agit d'un modèle d'observateur un-à-un spécialisé.
Cela signifie que la "zone de préoccupation" pour AppDelegate gère les états UIApplication spéciaux. Les plus importants sont:
- applicationDidFinishLaunching: - bon pour gérer la configuration et la construction au démarrage
- applicationWillTerminate: - bon pour le nettoyage à la fin
Vous devez éviter de mettre d'autres fonctionnalités dans AppDelegate car elles n'y appartiennent pas vraiment. Ces autres fonctionnalités comprennent:
- Données de document - vous devez avoir un singleton de gestionnaire de documents (pour plusieurs applications de document) ou un singleton de document (pour les applications de document unique)
- Contrôleurs de bouton / table / vue, méthodes de délégué de vue ou autre gestion de vue (sauf pour la construction de la vue de niveau supérieur dans applicationDidFinishLaunching :) - ce travail doit être effectué dans les classes de contrôleur de vue respectives.
Beaucoup de gens mettent ces éléments dans leur AppDelegate parce qu'ils sont paresseux ou pensent que AppDelegate contrôle l'ensemble du programme. Vous devriez éviter de centraliser dans votre AppDelegate car cela brouille les domaines de préoccupation dans l'application et ne s'adapte pas.
Votre délégué d'application est le cœur de votre application. C'est en fait votre "contrôleur de programme".
Le délégué d'application est la classe qui reçoit les messages au niveau de l'application, y compris le message applicationDidFinishLaunching le plus couramment utilisé pour lancer la création d'autres vues.
Bien que ce ne soit pas exactement similaire, vous pouvez le considérer comme la routine "main ()" de votre programme Cocoa.
la source
@Shivam, merci.
D'après ce que je comprends
appDelegate
, c'est proche de ce qu'est unApplication
Android. LeviewDidLoad
,viewDidDisappear
est comparable à ce que le cycle de vie d'Android. Chaque application a un cycle de vie, du lancement aux interruptions d'appels entrants, en passant par l'affichage des notifications. Si vous avez besoin de votre code pour faire quelque chose de spécial lorsque cessystem
événements se produisent, vous devez écrire du code pour les méthodes.Dans Android que nous utilisons
onPause
,onDestroy
,onCreate
callback un peu des méthodes pour gérer ces événements système.la source
onPause
,onCreate
et lesonDestroy
méthodes d'Android sont similaires àviewDidDisappear
, lesviewDidLoad
méthodes du cycle de vie d'un iOS View Controller. Si vous devez comparer, je dirais que laApplication
classe d'Android serait plus proche de celleAppDelegate
d'iOS.J'espère que cela aidera un peu plus ...
Les programmeurs novices dans ce langage ont toujours la même question: le programme part-il d'une méthode principale? Oui, vous avez raison dans ce cas; Les applications IOS partent également d'une méthode principale.
Votre classe principale appelle la fonction ci-dessous:
UIApplicationMain lance la boucle d'exécution Cocoa Touch et l'infrastructure d'application qui crée un
UIApplication
objet. Notre application a besoin de contenu, donc objective-c utilise un délégué pour gérer cela. C'est pourquoi nous l'appelons AppDelegate (agir en tant que délégué deUIApplication
). Nous implémentons certaines des méthodes facultatives de ce délégué et il se comporte en conséquence.la source