Wpis z mikrobloga

Kolejny raz widzę mały ból tyłka o iPhony na wykopie, także chciałem dodać od siebie kilka porównań na temat iOS’a i androida z pozycji 3 letniego doświadczenia w pisaniu aplikacji na ten pierwszy system

Nie chce na siłę kogoś przekonywać, czy android czy iOS jest lepszy ponieważ uważam, że zależy to od indywidualnych preferencji.
Osobiście zawsze ludziom mówię, że jeżeli kogoś stać to lepiej kupić iPhona ale nie będę naciskał na to, bo telefon ma być wygodny dla Ciebie. Sam od 4-5 lat korzystam z iPhona z kilkumiesięczną przerwą na Samsunga S4(?) i tygodniową przerwą na Samsungu S9. Ten ostatni bardzo mi się podobał ze względu na ekran, jednak system wydawał mi się naprawdę biedny zwłaszcza jak na takiego flagowca.

Trochę o sobie: od około 3 lat robie aplikację na iPhony i zdobyłem już całkiem niezłą wiedzę na temat języka Swift (używany do pisania aplikacji) i samego iOS’a.

Na pierwszy temat pójdzie zarządzanie pamięcią:
Zaznaczam, że porównuje tu tylko GC używany na androidzie i ARC używanym na iOS’ie.
Garbage Collector (GC) vs. Automatic Reference Counting (ARC)
Android korzysta z garbage collectora. Najprościej mówiąc jest to rodzaj zarządzania pamięcią, która polega na tym że w czasie rzeczywistym działania aplikacji, algorytm GC sprawdza czy jakieś obiekty są do usunięcia. Oczywiście działanie algorytmu GC zabiera zasoby potrzebne do wyczyszczenia pamięci. I tu pojawia się ARC

ARC nie działa w tzw. Run time, tylko już podczas kompilacji. Polega to na tym, że obiekty wiedzą w której chwili mają się usunąć z pamięci. Dzięki temu czyszczenie obiektów jest niemal natychmiastowe.

Co to oznacza dla użytkowników?
Osobiście nie korzystałem z nowszych androidów od dawna więc nie wiem jak to wygląda na topowych modelach, ale może pamiętacie jak kiedyś np. scrollowaliście widok w aplikcji, a on nagle miała lekkiego laga? Mogło to być spowodowane działanie algorytmu GC.

Spotkałem się z porównaniem (oczywiście było ono “na oko”), że przy tej samej aplikacji na androida i iOS’a, ta pierwsza będzie zużywać 200-300mb ramu, a druga 100mb. Dlatego porównywanie ilości pamięci ram na telefonach z różnymi systemami nie ma większego sensue

Co to oznacza dla dewelopera?
Deweloper aplikacji na androida nie musi przejmować się (aż w taki sposób jak na iOS) wycieków pamięci. Przy robieniu aplikacji na iOS, trzeba pamiętać, by jedne obiekty przypadkiem nie trzymały tzw. silnych referencji między sobą. Nie jest to uciążliwe ale trzeba się tego dowiedzieć, co dla początkującego dewelopera jest bardzo cięzkie do zrozumienia. Na moim przykładzie mogę powiedzieć, że przez około rok robienia aplikacji na iPhony nie wiedziałem o tym i moje aplikacje mogły mieć drobne wycieki pamięci.

Jeżeli chcielibyście więcej ciekawostek na ten temat, to zapraszam do obserwacji tagu
#iosciekawostki


#ios #bojowkaios #android #ciekawostki #programowanie
  • 3
@W_k_u: ARC jak najbardziej działa w rum time. Różnica jest taka, że ARC zwalnia pamięć od razu po usunięciu ostatniej referencji, a GC zwalnia pamięć w odpowiedniej dla niego chwili.
@Osapl: Faktycznie, źle się wyraziłem ( ͡° ʖ̯ ͡°). Chodziło mi o to, że obiektom przypisywany jest reatin i realese w compile time, a usuwane są w runtimie przy liczeniu referencji.