2013-08-05 13 views
15

Próbuję zrozumieć, jak działa zarządzanie pamięcią podczas korzystania z xamarin.ios i uruchamiania aplikacji na rzeczywistym urządzeniu z systemem iOS. Rozumiem, że platforma iOS nie ma narzędzia do zbierania śmieci, ale platforma używa ARC (Automatyczny licznik odwołań).Jak działa zarządzanie pamięcią na Xamarin.IOS

Czy to prawda, że ​​skompilowana aplikacja będzie używać ARC zamiast usuwania śmieci?

+0

Dobra prezentacja na temat: "Zaawansowane zarządzanie pamięcią na iOS i Androidzie - Evolve 2013" http://xamarin.com/evolve/2013#session-0w86u7bco2 –

Odpowiedz

25

ARC to technologia, która odnosi się do kodu źródłowego skompilowanego przez Objective-C kompilator i to ma wpływ na obrót każdego zadania tak:

foo = bar 

Gdzie „foo” i „bar” są NSObjects do następującego kodu:

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

Jak widać, jest to tylko podstęp t kompilator kapelusz przepisuje twój kod, więc nie zapominasz o zachowaniu/zwolnieniu rzeczy i odnosi się tylko do Objective-C.

Jakie zastosowania biblioteki Objective-C (ARC lub brak ARC) nie są tak naprawdę ważne dla MonoTouch, o ile wykorzystują istniejący udokumentowany protokół, aby zachować i kiedy go zwolnić. MonoTouch tylko przestrzega tych zasad.

Obiekty C# nie mają ścieżki kodu zatrzymania/zwolnienia, a zamiast tego wystarczy użyć GC, aby określić, które obiekty są żywe.

Po wyświetleniu obiektów Celu-C w świecie C#, Monotouch przyjmuje odwołanie (wywołuje funkcję zatrzymania). Gdy GG MonoTouch ustali, że obiekt nie jest już dostępny dla żadnego zarządzanego kodu, wywołanie GC wywołuje obiekt.

+1

Niesamowita odpowiedź. – Blounty

+1

** Gdy obiekty Celu-C są wyświetlane w świecie C#, Monotouch przyjmuje odwołanie (wywołuje funkcję zatrzymania). Kiedy MonoTouch GC ustali, że obiekt nie jest już dostępny dla żadnego zarządzanego kodu, wówczas wywołanie GC wywołuje zwolnienie na obiekcie. ** Jestem zdezorientowany tym. W Xamarin.ios używamy tylko C# no Objective C ... you znaczy powiedzieć, że wszystko co tworzymy w C# monotouch tworzy ekwiwalent używając Celu C ... gdybyś mógł rzucić trochę światła na to, byłoby dobrze –

6

Istnieje wielka streszczanie w docs Xamarin Here

+1

Dzięki za link. To jest bardzo użyteczne. – gyurisc