Domanda

Penso di sapere cosa fa il delegato dell'app. Ha alcuni metodi piacevoli come -applicationDidFinishLaunching che verranno chiamati quando l'app ha terminato l'avvio, e così via. Ma che cos'è in realtà? Quell'oggetto è istanziato nella funzione UIApplicationMain ?

E come funziona che ogni classe nella mia app abbia accesso a quell'oggetto Delegato app? Esiste un buon grafico in rete che visualizza queste relazioni?

È stato utile?

Soluzione

In Cocoa, un delegato è un oggetto a cui un altro oggetto si oppone per questioni di comportamento e informa sui cambiamenti nel suo stato. Ad esempio, un UITableViewDelegate è responsabile per rispondere alle domande su come dovrebbe comportarsi l'UITableView quando vengono effettuate le selezioni o le righe vengono riordinate. È l'oggetto che UITableView chiede quando vuole sapere quanto dovrebbe essere alta una determinata riga. Nel paradigma Model-View-Controller, i delegati sono Controller e i nomi di molti delegati terminano con "Controller."

A rischio di affermare l'ovvio, l'UIApplicationDelegate è il delegato per l'UIApplication. La relazione è un po 'più ovvia in Cocoa (Mac) che in Cocoa Touch (iPhone), poiché il delegato di NSApplication è in grado di controllare il comportamento di NSApplication in modo più diretto (impedendo ad esempio la chiusura dell'applicazione). iPhone non consente molto controllo sull'applicazione UIA, quindi principalmente il delegato UIApplication è informato delle modifiche piuttosto che avere un processo decisionale attivo.

UIApplicationDelegate non è strettamente disponibile dappertutto nell'app. La UIApplication singleton è ([UIApplication sharedApplication]) e attraverso di essa puoi trovare il suo delegato. Ma ciò non significa che sia appropriato per ogni oggetto in un'app parlare direttamente con il delegato dell'app. In generale, scoraggio gli sviluppatori dal far parlare oggetti casuali al delegato dell'app. La maggior parte dei problemi risolti in questo modo vengono risolti meglio tramite Singletons, NSNotification o altri oggetti delegati.

Per quanto riguarda la sua creazione, su Mac non c'è nulla di magico nel delegato dell'app. Nella maggior parte dei casi è solo un oggetto istanziato e cablato dal NIB. Su iPhone, tuttavia, il delegato dell'app può essere leggermente magico se istanziato da UIApplicationMain (). Il quarto parametro è un NSString che indica la classe del delegato dell'app e UIApplicationMain () ne creerà uno e lo imposterà come delegato di sharedApplication. Ciò consente di impostare il delegato senza NIB (qualcosa di molto difficile su Mac). Se il quarto parametro di UIApplicationMain () è zero (come nei modelli Apple), il delegato viene creato e cablato dal NIB principale, proprio come la finestra principale.

Altri suggerimenti

L'oggetto è istanziato in questo modo;

La funzione principale cerca il pennino principale impostato in info.plist. Il pennino ha come delegato app impostato su una classe che deve implementare UIApplicationDelegates e i metodi richiesti. Il delegato dell'app quindi carica un viewcontroller.

Funge da oggetto callback a livello di applicazione per eventi che interessano l'intera applicazione, come memoria insufficiente, ecc.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top