web-dev-qa-db-fra.com

À quoi sert AppDelegate et comment savoir quand l'utiliser?

Je commence tout juste à travailler sur les applications iPhone. Comment savoir quand je devrais mettre des éléments dans AppDelegate par rapport à une classe personnalisée? Existe-t-il une règle ou un type d'analogie avec un autre langage de programmation tel que Python ou PHP) qui utilise un modèle de type AppDelegate?

139
resopollution

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 ranger trop de choses dans un emplacement central - une bonne conception de programme implique normalement une séparation des 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 individuel personnalisé.

Cela signifie que le "sujet de préoccupation" pour AppDelegate gère des états UIApplication spéciaux. Les plus importants d'entre eux sont:

  • applicationDidFinishLaunching: - convient à la gestion de la configuration et de la construction au démarrage
  • applicationWillTerminate: - bon pour nettoyer à la fin

Vous devez éviter de mettre d'autres fonctionnalités dans AppDelegate car elles n'y appartiennent pas vraiment. Cette autre fonctionnalité comprend:

  • Données de document - vous devez avoir un singleton de gestionnaire de documents (pour plusieurs applications de document) ou un singleton de document (pour des applications à un seul document)
  • Contrôleurs bouton/table/vue, méthodes de délégation de vue ou autre traitement de vue (à l'exception de 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 jettent ces choses dans leur AppDelegate parce qu’ils sont paresseux ou qu’ils pensent que AppDelegate contrôle l’ensemble du programme. Vous devez éviter de centraliser dans votre AppDelegate, car cela brouille les zones de préoccupation dans l'application et ne s'adapte pas.

239
Matt Gallagher

Votre délégué à l'application est le cœur de votre application. C'est effectivement 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 pas tout à fait similaire, vous pourriez penser à cela comme à la routine "main ()" de votre programme Cocoa.

24
Andrew Grant

@Shivam, merci.

D'après ce que je comprends de appDelegate, c'est proche de ce qu'est un Application dans Android. Le viewDidLoad, viewDidDisappear est comparable au cycle de vie d’Android. Chaque application a un cycle de vie allant du lancement aux interruptions d'appels entrants, en passant par les notifications. Si vous avez besoin que votre code fasse quelque chose de spécial lorsque ces événements system se produisent, vous devez écrire du code pour les méthodes.

Dans Android, nous utilisons onPause, onDestroy, onCreate un peu comme des méthodes de rappel pour gérer de tels événements système.

2
Siddharth

J'espère que cela aidera un peu plus ...

Les programmeurs débutant dans cette langue ont toujours la même question: le programme part-il d'une méthode principale? Oui, vous avez raison dans ce cas. IOS les applications démarrent également à partir d'une méthode principale.
Votre classe principale appelle la fonction ci-dessous:

 UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 

UIApplicationMain lance la boucle d'exécution et l'infrastructure de l'application Cocoa Touch qui créent un objet UIApplication. Notre application a besoin de contenu, donc objective-c utilise un délégué pour le gérer. C'est pourquoi nous l'appelons AppDelegate (agir en tant que délégué de UIApplication). Nous implémentons certaines des méthodes optionnelles de ce délégué et celui-ci se comporte en conséquence.

1
Anurag Bhakuni