2013-08-05 12 views
15

Sto cercando di capire come funziona la gestione della memoria quando si utilizza xamarin.ios e si esegue l'app su un dispositivo iOS reale. Comprendo che la piattaforma iOS non ha un garbage collector, ma la piattaforma utilizza ARC (Automatci Reference Counting).Come funziona la gestione della memoria su Xamarin.IOS

È vero che l'app compilata utilizzerà ARC invece di garbage collection?

+0

Una buona presentazione sull'argomento: "Gestione memoria avanzata su iOS e Android - Evolve 2013" http://xamarin.com/evolve/2013#session-0w86u7bco2 –

risposta

25

arco è una tecnologia che si applica al codice sorgente compilato dal compilatore Objective-C e ha l'effetto di trasformare ogni incarico come questo:

foo = bar 

Dove "foo" e "bar" sono NSObjects nel codice seguente:

if (foo != null) 
    [foo release]; 
if (bar != null) 
    [bar retain] 
foo = bar; 

Come si può vedere, si tratta solo di un compilatore trick t hat riscrive il tuo codice in modo da non dimenticare di conservare/rilasciare le cose e si applica solo a Objective-C.

Quali librerie Objective-C utilizzano (ARC o no ARC) non è molto importante per MonoTouch, nella misura in cui utilizzano il protocollo documentato esistente per quando conservare e quando rilasciare. MonoTouch segue solo quelle regole.

Gli oggetti C# non hanno il percorso del codice di mantenimento/rilascio e utilizzano solo GC per determinare quali oggetti sono vivi.

Quando gli oggetti Objective-C sono emersi nel mondo C#, Monotouch prende un riferimento (chiama retain). Quando il GC MonoTouch determina che un oggetto non è più raggiungibile da alcun codice gestito, il GC chiama il rilascio sull'oggetto.

+1

Risposta stupenda. – Blounty

+1

** Quando gli oggetti Objective-C sono emersi nel mondo C#, Monotouch prende un riferimento (chiama retain). Quando il GC MonoTouch determina che un oggetto non è più raggiungibile da alcun codice gestito, allora il GC chiama il rilascio sull'oggetto. ** Sono confuso con questo .. In Xamarin.ios usiamo solo C# no Obiettivo C ... tu voglio dire per tutto ciò che creiamo in C# monotouch crea una cosa equivalente usando l'obiettivo C ... se potessi far luce su questo, sarebbe bello –

6

C'è una grande sommarizzazione nella documentazione Xamarin Here

+1

Grazie per il collegamento. E 'molto utile. – gyurisc

Problemi correlati