Gestione della memoria in iPhone

iPhone Soft! Commenta l'articolo

E’ buona norma settare una variabile a nil dopo aver fatto release:

[myVariable release], myVariable = nil;  

Non farlo vorrebbe dire incappare in errori difficilmente rintracciabili. A volte la memoria puntata da myVariable ha ancora il vecchio contenuto dell’oggetto, e l’applicazione non darà errori, altre volte invece una porzione della memoria allocata da myVariable viene sovrascritta e si otterrà un risultato imprevedibile.


Una piacevole caratteristica di Object-c è quella di inviare messaggi verso oggetti a nil senza ottenere errori (a differenza di Java, per esempio, dove NullPointerException è probabilmente il più comune).
Quindi, se avete impostato myVaraible a nil e poi tentate di inviare un messaggio ([myVariable qualcosa]) questo non fallirà.

Si potrebbe sostenere che l’invio di un messaggio ad un oggetto nullo è il risultato di codice difettoso. Il codice dovrebbe sapere se un oggetto è valido o nullo. Ma ecco una semplice contro-esempio:

Se la tua classe ha proprietà con una dichiarazione retain, allora bisogna rilasciare queste proprietà nel metodo dealloc. In molti casi, settare il valore di una proprietà a nil e rilasciarla nel metodo dealloc è perfettamente valido.

Mentre è cosa diversa quando si utilizzano funzioni di Core Foundation.

Per esempio se chiami la funzione qui di seguito con il parametro a nil, fallirà:

CFRelease( variableNIL); 

Prima di chiamare la funzione bisogna verificare il valore del parametro:

   if (variableNIL) CFRelease(variableNIL);  

Scrivi un Commento

Home | Graffiti e Disegni | Educazione | Chi siamo | Blog | Progetti | Contatti
RSS Feed Comments RSS Accedi