Wrong Forum Blog
Connettiti o Registrati a Wrong

Unisciti al forum, è facile e veloce

Wrong Forum Blog
Connettiti o Registrati a Wrong
Wrong Forum Blog
Vuoi reagire a questo messaggio? Crea un account in pochi click o accedi per continuare.

Guida XCODE Funzione main e gestione della memoria sviluppo applicazioni

Andare in basso

Guida XCODE Funzione main e gestione della memoria sviluppo applicazioni Empty Guida XCODE Funzione main e gestione della memoria sviluppo applicazioni

Messaggio Da andre Sab Ago 13, 2011 1:28 pm

All'interno della cartella Other sources è presente il file main.m.
Come in una qualsiasi applicazione C-based, il punto di ingresso di
un'applicazione iOS al momento del lancio dell'applicazione è proprio la
funzione main.

L'implementazione di questa funzione main è minimale e, nella
realizzazione delle vostre applicazioni, non avrete alcuna necessità di
modificare questa funzione.

Andiamo adesso ad analizzare il codice contenuto all'interno della funzione main:

int main(int argc, char *argv[]) {

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}

Come possiamo vedere, la prima operazione che viene eseguita è quella di istanziare un oggetto di tipo Autorelease Pool. Un oggetto di questo tipo rappresenta il gestore della memoria relativo alla nostra applicazione. Su i dispositivi iOS non è presente nessun tipo di Garbage Collection
in quanto la memoria dei dispositivi è molto limitata e quindi è
necessario l'utilizzo di un gestore di memoria (Autorelease Pool) molto
più complesso rispetto al Garbage Collection.
Lo scopo dell'Autorelease Pool è quello di evitare che oggetti "inutili"
siano mantenuti in memoria e che quindi venga occupato dello spazio
prezioso per risorse che magari non sono più necessarie per il corretto
svolgimento dell'applicazione.
Ma come fa l'Autorelease Pool a capire se un oggetto è utile o
inutile? Per svolgere i suoi compiti Autorelease Pool sfrutta una
proprietà che tutti gli oggetti hanno in Objective C ovvero il retainCount che rappresenta ciò che precedentemente avevamo identificato come il contatore di riferimenti per quell'oggetto.
Quando il contatore di un oggetto raggiunge valore zero, viene
automaticamente eliminato dalla memoria dall'Autorealease Pool e dunque
gli oggetti che riteniamo necessari per la corretta esecuzione
dell'applicazione dovranno mantenere sempre un retainCount maggiore o
uguale a 1.

La gestione della memoria eseguita in maniera efficiente è un punto
cruciale quando si sviluppa per dispositive mobile o dispositivi in cui
si hanno delle risorse limitate.

Negli esempi precedenti abbiamo visto che per ogni attributo della classe (che è un oggetto) veniva effettuato il release nel metodo dealloc della classe.
Può capitare, però, all'interno di un metodo, di dover dichiarare alcuni
oggetti per poter espletare la funzione richiesta al metodo stesso. In
questo caso il release di questi oggetti non deve essere
inserito nel dealloc (perchè il dealloc lavora esclusivamente sugli
attributi della classe), il release per l'oggetto deve essere, dunque, inserito nel metodo stesso e deve essere effettuato quando l'oggetto non è più necessario.
Ovviamente bisogna prestare attenzione al punto del codice in cui inserire il release dell'oggetto,
perchè se per esempio allocate ed inizializzate un oggetto, fate il
release e poi lo passate come argomento ad un altro metodo,
l'applicazione andrà ovviamente in crash.

In questo paragrafo abbiamo spiegato solo i concetti principali della
gestione della memoria, se si vuole approfondire l'argomento si
consiglia di leggere la documentazione Apple.

Proseguendo nella nostra analisi del codice, troviamo la chiamata alla funzione UIApplicationMain
che è una funzione importantissima in quanto ha il compito di
inizializzare la nostra applicazione con i quattro parametri di sistema
che gli vengono passati come argomento.

Oggetto Delegate


Nella lezione precedente, durante l'analisi di un'applicazione window-based, abbiamo incontrato il termine appDelegate. Ma che cosa è questo appDelegate?

Sostanzialmente, il delegate (o delegato)
rappresenta un pattern di programmazione nel quale viene delegato, ad
una determinata classe, il comportamento ad alto livello.
Utilizzeremo il delegate quando sarà presente un controller
(vedremo più avanti di cui si tratta) che rileva, per esempio, un cambio
di stato dell'applicazione per poi segnalarlo al delegate stesso il
quale compierà una determinata operazione.

L'oggetto delegate gestisce anche i vari messaggi critici di sistema e
deve essere presente in ogni applicazione iOS. In applicazioni di
grosse dimensioni avere un delegate per ogni modulo significativo
consente di mantenere il codice ordinato e poterne fare manutenzione in
maniera semplice ed intuitiva.
andre
andre
Admin
Admin

Maschio Messaggi : 1791
Wrong Points : 2514
Reputazione : 7
Data d'iscrizione : 06.12.10
Età : 31

Personaggio GDR
Nome del personaggio: Zeod
Livello: 1
Esperienza:
Guida XCODE Funzione main e gestione della memoria sviluppo applicazioni Left_bar_bleue6/100Guida XCODE Funzione main e gestione della memoria sviluppo applicazioni Empty_bar_bleue  (6/100)

https://wrong.forumattivo.it

Torna in alto Andare in basso

Torna in alto

- Argomenti simili

 
Permessi in questa sezione del forum:
Non puoi rispondere agli argomenti in questo forum.