SlideShare a Scribd company logo
1 of 26
Zarządzanie pamięcią w iOS 5.0
Artur Ozierański
Senior iOS Developer
Synthcomm sp. z o.o.
Agenda
Wstęp
Model zliczania referencji
Wprowadzenie do ARC
Używanie ARC
Wydajność
Migracja do ARC
Podsumowanie
Agenda
Wstęp
Model zliczania referencji
Wprowadzenie do ARC
Używanie ARC
Wydajność
Migracja do ARC
Podsumowanie
Wstęp
Przykłady częstych błędów:
Wstęp
retain
release
autorelease
BAD_ACCESS
pointer being freed was not allocated
dealloc
retained czy nie?
retain
retain
autorelease
release
BAD_ACCESS
deallocautorelease
retain
release
autorelease
Agenda
Wstęp
Model zliczania referencji
Wprowadzenie do ARC
Używanie ARC
Wydajność
Migracja do ARC
Podsumowanie
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ęp
Model zliczania referencji
Wprowadzenie do ARC
Używanie ARC
Wydajność
Migracja do ARC
Podsumowanie
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ęp
Model zliczania referencji
Wprowadzenie do ARC
Używanie ARC
Wydajność
Migracja do ARC
Podsumowanie
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ęp
Model zliczania referencji
Wprowadzenie do ARC
Używanie ARC
Wydajność
Migracja do ARC
Podsumowanie
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ęp
Model zliczania referencji
Wprowadzenie do ARC
Używanie ARC
Wydajność
Migracja do ARC
Podsumowanie
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ęp
Model zliczania referencji
Wprowadzenie do ARC
Używanie ARC
Wydajność
Migracja do ARC
Podsumowanie
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ński
Senior iOS Developer
e-mail: artur.ozieranski@synthcomm.com

More Related Content

Similar to Zarządzanie pamięcią w i os 5

HYC - Angular stań się kanciastym
HYC - Angular stań się kanciastymHYC - Angular stań się kanciastym
HYC - Angular stań się kanciastymDariusz Jagieło
 
Using Red Gate SQL Doc for database documentation
Using Red Gate SQL Doc for database documentationUsing Red Gate SQL Doc for database documentation
Using Red Gate SQL Doc for database documentationMariusz Koprowski
 
Dobre przepisy na cake php
Dobre przepisy na cake phpDobre przepisy na cake php
Dobre przepisy na cake phpDaniel Mendalka
 
Nie tylko C# - Ekosystem Microsoft dla programistów
Nie tylko C# - Ekosystem Microsoft dla programistówNie tylko C# - Ekosystem Microsoft dla programistów
Nie tylko C# - Ekosystem Microsoft dla programistówintive
 
Roman Czarko-Wasiutycz- Projektowanie baz danych
Roman Czarko-Wasiutycz- Projektowanie baz danychRoman Czarko-Wasiutycz- Projektowanie baz danych
Roman Czarko-Wasiutycz- Projektowanie baz danychWomen in Technology Poland
 
Marta Sztybor - Zorientowany obiektowo CSS, czyli jak tworzyć layouty aplikac...
Marta Sztybor - Zorientowany obiektowo CSS, czyli jak tworzyć layouty aplikac...Marta Sztybor - Zorientowany obiektowo CSS, czyli jak tworzyć layouty aplikac...
Marta Sztybor - Zorientowany obiektowo CSS, czyli jak tworzyć layouty aplikac...The Awwwesomes
 
10 przykazań bezpiecznego programowania
10 przykazań bezpiecznego programowania10 przykazań bezpiecznego programowania
10 przykazań bezpiecznego programowaniaSecuRing
 
4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski
4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski
4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech DworakowskiPROIDEA
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyqbeuek
 
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław SobieckiPodstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław SobieckiGrzegorz Bartman
 
Programowanie Równolegle - Parallel Extensions
Programowanie Równolegle - Parallel ExtensionsProgramowanie Równolegle - Parallel Extensions
Programowanie Równolegle - Parallel ExtensionsWojciech Grześkowiak
 
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbaćBartosz Ratajczyk
 

Similar to Zarządzanie pamięcią w i os 5 (13)

HYC - Angular stań się kanciastym
HYC - Angular stań się kanciastymHYC - Angular stań się kanciastym
HYC - Angular stań się kanciastym
 
Using Red Gate SQL Doc for database documentation
Using Red Gate SQL Doc for database documentationUsing Red Gate SQL Doc for database documentation
Using Red Gate SQL Doc for database documentation
 
Dobre przepisy na cake php
Dobre przepisy na cake phpDobre przepisy na cake php
Dobre przepisy na cake php
 
Nie tylko C# - Ekosystem Microsoft dla programistów
Nie tylko C# - Ekosystem Microsoft dla programistówNie tylko C# - Ekosystem Microsoft dla programistów
Nie tylko C# - Ekosystem Microsoft dla programistów
 
Scala
ScalaScala
Scala
 
Roman Czarko-Wasiutycz- Projektowanie baz danych
Roman Czarko-Wasiutycz- Projektowanie baz danychRoman Czarko-Wasiutycz- Projektowanie baz danych
Roman Czarko-Wasiutycz- Projektowanie baz danych
 
Marta Sztybor - Zorientowany obiektowo CSS, czyli jak tworzyć layouty aplikac...
Marta Sztybor - Zorientowany obiektowo CSS, czyli jak tworzyć layouty aplikac...Marta Sztybor - Zorientowany obiektowo CSS, czyli jak tworzyć layouty aplikac...
Marta Sztybor - Zorientowany obiektowo CSS, czyli jak tworzyć layouty aplikac...
 
10 przykazań bezpiecznego programowania
10 przykazań bezpiecznego programowania10 przykazań bezpiecznego programowania
10 przykazań bezpiecznego programowania
 
4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski
4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski
4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatyczny
 
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław SobieckiPodstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
 
Programowanie Równolegle - Parallel Extensions
Programowanie Równolegle - Parallel ExtensionsProgramowanie Równolegle - Parallel Extensions
Programowanie Równolegle - Parallel Extensions
 
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
 

Zarządzanie pamięcią w i os 5