26
Zarządzanie pamięcią w iOS 5.0 Artur Ozierański Senior iOS Developer Synthcomm sp. z o.o.

Zarządzanie pamięcią w i os 5

Embed Size (px)

Citation preview

Page 1: Zarządzanie pamięcią w i os 5

Zarządzanie pamięcią w iOS 5.0

Artur OzierańskiSenior iOS DeveloperSynthcomm sp. z o.o.

Page 2: Zarządzanie pamięcią w i os 5

Agenda

WstępModel zliczania referencjiWprowadzenie do ARCUżywanie ARCWydajnośćMigracja do ARCPodsumowanie

Page 3: Zarządzanie pamięcią w i os 5

Agenda

WstępModel zliczania referencjiWprowadzenie do ARCUżywanie ARCWydajnośćMigracja do ARCPodsumowanie

Page 4: Zarządzanie pamięcią w i os 5

Wstęp

Przykłady częstych błędów:

Page 5: Zarządzanie pamięcią w i os 5

Wstęp

retainrelease

autorelease BAD_ACCESS

pointer being freed was not allocateddealloc

retained czy nie?

retain

retain

autoreleaserelease

BAD_ACCESS

deallocautorelease

retain

release

autorelease

Page 6: Zarządzanie pamięcią w i os 5

Agenda

WstępModel zliczania referencjiWprowadzenie do ARCUżywanie ARCWydajnośćMigracja do ARCPodsumowanie

Page 7: Zarządzanie pamięcią w i os 5

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.

Page 8: Zarządzanie pamięcią w i os 5

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.

Page 9: Zarządzanie pamięcią w i os 5

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!

Page 10: Zarządzanie pamięcią w i os 5

Agenda

WstępModel zliczania referencjiWprowadzenie do ARCUżywanie ARCWydajnośćMigracja do ARCPodsumowanie

Page 11: Zarządzanie pamięcią w i os 5

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ść.

Page 12: Zarządzanie pamięcią w i os 5

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ą.

Page 13: Zarządzanie pamięcią w i os 5

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!

Page 14: Zarządzanie pamięcią w i os 5

Agenda

WstępModel zliczania referencjiWprowadzenie do ARCUżywanie ARCWydajnośćMigracja do ARCPodsumowanie

Page 15: Zarządzanie pamięcią w i os 5

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)

Page 16: Zarządzanie pamięcią w i os 5

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.

Page 17: Zarządzanie pamięcią w i os 5

Nowe elementy języka

• __weak• __strong• __unsafe__unretained• @property (unsafe_unretained)• @property (strong)• @property (weak)• @autoreleasepool {}• __bridge itp.

Page 18: Zarządzanie pamięcią w i os 5

Cykle referencyjne

1

2 3

45

Page 19: Zarządzanie pamięcią w i os 5

Agenda

WstępModel zliczania referencjiWprowadzenie do ARCUżywanie ARCWydajnośćMigracja do ARCPodsumowanie

Page 20: Zarządzanie pamięcią w i os 5

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.

Page 21: Zarządzanie pamięcią w i os 5

Agenda

WstępModel zliczania referencjiWprowadzenie do ARCUżywanie ARCWydajnośćMigracja do ARCPodsumowanie

Page 22: Zarządzanie pamięcią w i os 5

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.

Page 23: Zarządzanie pamięcią w i os 5

Migracja do ARC

Page 24: Zarządzanie pamięcią w i os 5

Agenda

WstępModel zliczania referencjiWprowadzenie do ARCUżywanie ARCWydajnośćMigracja do ARCPodsumowanie

Page 25: Zarządzanie pamięcią w i os 5

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.

Page 26: Zarządzanie pamięcią w i os 5

Dziękuję za uwagę.

Artur OzierańskiSenior iOS Developer

e-mail: [email protected]