2009-03-16 16 views

risposta

215

Normalmente evito l'approccio progettuale implicito dall'uso di Andrew del termine "cuore della vostra applicazione". Ciò che intendo è che penso che dovresti evitare di raggruppare troppe cose in una posizione centrale: una buona progettazione del programma normalmente comporta la separazione delle funzionalità per "area di interesse".

Un oggetto delegato è un oggetto che viene notificato quando l'oggetto a cui è connesso raggiunge determinati eventi o stati. In questo caso, il Delegato dell'applicazione è un oggetto che riceve notifiche quando l'oggetto UIApplication raggiunge determinati stati. Per molti aspetti, è un modello di Osservatore individuale uno-a-uno.

Ciò significa che "area di interesse" per AppDelegate sta gestendo stati UIApplication speciali. Il più importante di questi sono:

  • applicationDidFinishLaunching: - buona per la gestione della configurazione on-startup e la costruzione
  • applicationWillTerminate: - buono per la pulizia alla fine

Si dovrebbe evitare di mettere altre funzionalità in AppDelegate poiché in realtà non ci appartengono. Tale altre funzionalità comprende:

    dati
  • documento - si dovrebbe avere un Singleton Document Manager (per le applicazioni multiple di documenti) o di un documento di Singleton (per le applicazioni di singolo documento)
  • Pulsante/tabella/vista controllori, vista delegato metodi o altra gestione della vista (eccetto per la costruzione della vista di livello superiore in applicationDidFinishLaunching :) - questo lavoro dovrebbe essere nelle rispettive classi di controller di vista.

Molte persone inseriscono queste cose nel proprio AppDelegate perché sono pigre o pensano che AppDelegate controlli l'intero programma. Dovresti evitare di centralizzare nel tuo AppDelegate poiché confonde le aree di interesse nell'app e non si ridimensiona.

+2

Matt, l'ultima frase non ha senso. – Abizern

+3

Mi dispiace, Abizern. Ho corretto la formulazione, ora. –

+4

+1 Questa è una risposta eccellente. Stavo guardando un codice di esempio che mostrava le sottoview chiamate appDelegate per indicare a un controller di visualizzazione di passare a una sottoview diversa, e questo sembrava un odore di codice. Buono a sapersi, il mio naso funziona ancora. – Alan

21

Il delegato dell'applicazione è il cuore della vostra applicazione. È effettivamente il tuo "Controller di programma".

Il Delegato applicazione è la classe che riceve i messaggi a livello di applicazione, incluso il messaggio applicationDidFinishLaunching più comunemente utilizzato per avviare la creazione di altre viste.

Sebbene non esattamente simile, si potrebbe pensare ad esso come alla routine "principale()" del programma Cocoa.

+0

Ti sto dando +1 perché avere tutti i tuoi controller UI in AppDelegate è meno complicato che creare tutte quelle classi personalizzate per questo. – rwols

+2

@rwols state attenti, separando le vostre preoccupazioni è utile per un codice più pulito ed è meno complicato eseguire il debug, è necessario prendersi il tempo necessario per creare tali classi personalizzate e non mettere tutti gli osservatori in un singolo file. – wheeliez

1

Spero che questo aiuterà un po 'di più ...

programmatori nuovi a questo linguaggio avere sempre la stessa domanda - fa l'avvio del programma da un metodo main? Sì, hai ragione in questo caso; Le app IOS iniziano anche da un metodo principale.
La classe principale chiama la funzione di seguito:

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

UIApplicationMain prende il via il ciclo e applicazione eseguire le infrastrutture Cocoa Touch, che crea un oggetto UIApplication.La nostra applicazione ha bisogno di contenuti in modo che oggettivo-c usi un delegato per gestirlo. Ecco perché lo chiamiamo AppDelegate (funge da delegato di UIApplication). Implementiamo alcuni dei metodi facoltativi di tale delegato e si comporta di conseguenza.

+0

per favore qualcuno può farmi capire quale errore ha sbagliato nella risposta sopra –

+2

Sembra confuso perché a) non usi la punteggiatura/ortografia/grammatica corrette, b) è fuori tema in quanto in realtà non risponde domanda il poster originale chiesto. – Kay

-1

@Shivam, grazie.

Da quello che ho capito di appDelegate, è vicino a quello che un Application è in Android. Lo viewDidLoad, viewDidDisappear è paragonabile a quello del Ciclo di vita di Android. Ogni applicazione ha un ciclo di vita, dal lancio alle interruzioni dalle chiamate in arrivo, alle notifiche che vengono visualizzate. Se hai bisogno che il tuo codice faccia qualcosa di speciale quando si verificano questi eventi system, devi scrivere il codice dei metodi.

In Android utilizziamo i metodi di callback , onDestroy, onCreate per gestire tali eventi di sistema.

+0

I metodi 'onPause',' onCreate' e 'onDestroy' di Android sono più simili ai metodi' viewDidDisappear', 'viewDidLoad' del ciclo di vita di un controller di visualizzazione iOS. Se si deve confrontare, direi che la classe 'Application' di Android sarebbe più vicina a' AppDelegate' di iOS. –

+0

Grazie, se puoi migliorare la mia risposta, per favore. Cancellerò la mia risposta dopo aver letto la tua. – Siddharth

Problemi correlati