Upload
pawelqus
View
1.953
Download
0
Embed Size (px)
Citation preview
Zarządzanie pamięcią w iOS 5.0
Artur OzierańskiSenior iOS DeveloperSynthcomm sp. z o.o.
Agenda
WstępModel zliczania referencjiWprowadzenie do ARCUżywanie ARCWydajnośćMigracja do ARCPodsumowanie
Agenda
WstępModel zliczania referencjiWprowadzenie do ARCUżywanie ARCWydajnośćMigracja do ARCPodsumowanie
Wstęp
Przykłady częstych błędów:
Wstęp
retainrelease
autorelease BAD_ACCESS
pointer being freed was not allocateddealloc
retained czy nie?
retain
retain
autoreleaserelease
BAD_ACCESS
deallocautorelease
retain
release
autorelease
Agenda
WstępModel zliczania referencjiWprowadzenie do ARCUżywanie ARCWydajnośćMigracja do ARCPodsumowanie
Model zliczania referencji
• Działanie na zasadzie „tokenów”.• Działa na poziomie runtime.• Obiekty usuwane są w pamięci kiedy licznik referencji dojdzie
do 0.• Możemy inkrementować i dekrementować licznik, nie
możemy zwalniać obiektów ręcznie.• „Właściciel obiektu”.• Nie obejmuje malloc/free.• Nie obejmuje obiektów Core Foundation.
Zarządzanie pamięcią przed iOS 5
• Podstawowe zasady:– jesteś właścicielem obiektu, który stworzyłeś,– możesz przejąć własność obiektu za pomocą retain,– pozbywasz się obiektu, kiedy go nie potrzebujesz (release,
autorelease),– nie zwalniasz obiektów, do których nie masz praw
własności.• Metody dealloc.• NSAutoreleasePool.• Osobne zasady dla obiektów Core Foundation.
Zarządzanie pamięcią przed iOS 5
• Problemy:– dużo zbędnej pracy z zarządzaniem pamięcią,– trudne debugowanie,– trudna nauka dla nowych programistów,– mniej uwagi nad właściwą funkcjonalnością aplikacji!
Agenda
WstępModel zliczania referencjiWprowadzenie do ARCUżywanie ARCWydajnośćMigracja do ARCPodsumowanie
ARC
ARC (Automatic Reference Counting):• nowe narzędzie działające na poziomie kompilacji,• wymaga Xcode 4.2 i LLVM 3.0,• uproszcza zarządzanie pamięcią w modelu
retain/release,• łatwiejsze do nauczenia,• bezpieczniejsze i bardziej stabilne,• zwiększające produktywność.
ARC
Czym nie jest ARC:• Garbage Collectorem!,• automatycznym zarządzaniem pamięcią dla
malloc/free i Core Foundation,• narzędziem runtime,• nowym modelem zarządzania pamięcią.
Co zyskujemy używając ARC
• Zarządzanie pamięcią na zasadzie grafu powiązań między obiektami.
• Koniec z retain/release.• Znikają metody dealloc (z małymi wyjątkami).• Znikają wywołania autorelease przy zwracaniu obiektu.• Autorelease pool są czytelniejsze.• Mniej kodu.• Mniej błędów związanych z pamięcią.• Unikanie cykli referencji.• Automatyczne „nilowanie” zmiennych.• Kompatybilność wstecz!
Agenda
WstępModel zliczania referencjiWprowadzenie do ARCUżywanie ARCWydajnośćMigracja do ARCPodsumowanie
Zasady używania ARC
1. Nie wywołujemy retain/release/autorelease/dealloc (także @selector(retain) etc.).
2. Nie implementujemy retain/release.. .3. Nie używamy wskaźników na obiekty w strukturach
4. Nie używamy NSAutoreleasePool (teraz: @autoreleasepool)
Zasady używania ARC c.d.
5. Nie używamy rzutowania typu id <-> void* (używamy nowych słów kluczowych __bridge itd.
6. Nie używamy assign i retain w deklaracji property. Zamiast tego weak i strong.
7. Nazwa property nie może zaczynać się od new.
Nowe elementy języka
• __weak• __strong• __unsafe__unretained• @property (unsafe_unretained)• @property (strong)• @property (weak)• @autoreleasepool {}• __bridge itp.
Cykle referencyjne
1
2 3
45
Agenda
WstępModel zliczania referencjiWprowadzenie do ARCUżywanie ARCWydajnośćMigracja do ARCPodsumowanie
Wydajność
Spadek wydajności?•Poprawiono wydajność retain/release dla NSObject.•@autoreleasepool szybsze niż NSAutoreleasePool.•Przesyłanie komunikatów między obiektami szybsze.•Brak autorelease przy zwracaniu obiektów w metodach = mniej cykli procesora.
Agenda
WstępModel zliczania referencjiWprowadzenie do ARCUżywanie ARCWydajnośćMigracja do ARCPodsumowanie
Migracja do ARC
• Wszystkie template’y w Xcode 4.2 mają domyślnie wybraną opcję używania ARC.
• Można wyłączyć.• Powstało nowe narzędzie migracyjne ze starszych
projektów, które nie używały ARC.
Migracja do ARC
Agenda
WstępModel zliczania referencjiWprowadzenie do ARCUżywanie ARCWydajnośćMigracja do ARCPodsumowanie
Podsumowanie
• Apple zaleca stosowanie ARC.• Zarządzanie pamięcią jest łatwiejsze.• Dla doświadczonych programistów „oduczenie się”
starych zasad może być trudne.• Zyskujemy na czasie.• Zyskujemy na wydajności.• Zyskujemy na czytelności kodu.