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);
Ultimi Commenti