zarządzanie pamięcią w i os 5

Post on 26-Jun-2015

1.952 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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.

Dziękuję za uwagę.

Artur OzierańskiSenior iOS Developer

e-mail: artur.ozieranski@synthcomm.com

top related