2011-10-12 13 views
5

in Xcode 4.2 ho trovato molto frustrante, perché non è possibile utilizzare:Come si rilascia la memoria in xcode 4.2?

-(void)dealloc { 
[label release]; //'release' is unavailable 
[super dealloc]; //'dealloc' is forbidden in automatic reference counting 
} 

c'è un altro modo perché autorelease e altri deallocs non funzionano neanche.

+0

... non è così. A meno che tu non abbia il tuo progetto usando la gestione manuale della memoria. – JoePasq

+0

quindi non riceverei un avviso di memoria anche se non ho rilasciato memoria? – iphonemaniac

+0

Non posso dirlo in cima alla mia testa. Controlla i documenti, non penso che gli avvertimenti sulla memoria siano andati via, specialmente con l'iPhone 3GS ancora sul mercato. – JoePasq

risposta

9

Xcode 4.2 introduce "Automatic Reference Counting" (aka ARC). Questa è una funzione del compilatore che fondamentalmente inserisce e conserva le chiamate per te. Sotto ARC, se hai un puntatore a un oggetto, lo stai mantenendo. Quando il puntatore esce dall'ambito o viene riassegnato per puntare a un altro oggetto, l'oggetto originale viene rilasciato. È davvero carino.

Così, in breve, è sufficiente rimuovere tutte le chiamate al retain, release e autorelease, e il compilatore fare la cosa giusta per voi.

+0

È fantastico! – iphonemaniac

1

Leggere il conteggio di riferimento automatico. Se scrivi correttamente il tuo codice, non hai più bisogno di farlo.

Se si desidera utilizzare il vecchio codice senza eseguire la conversione, disabilitare ARC. inserire -fno-objc-arc nei flag del compilatore per tutti i moduli di origine che non si desidera utilizzare ARC.

joe

+0

Come si scrive il codice correttamente – iphonemaniac

+0

Sarebbe importante se non avessi rilasciato la memoria? – iphonemaniac

+0

No, non sarebbe – iphonemaniac