Explorarea modelelor de design utilizate de Apple pe iOS

Modelele de proiectare sunt o parte crucială a proiectării software, ele furnizând o soluție la problemele care apar frecvent.
Apple folosește aceste modele în toate cadrele iOS. În acest articol, vom discuta despre cum sunt utilizate tiparele de design în API-urile interne Apple și cum puteți beneficia de aceste implementări.

Folosim cadre iOS precum UIKit CoreLocation CoreBluetooth și multe altele în dezvoltarea noastră de zi cu zi. Componente precum UITableView UIStackView toate sunt scrise folosind un design excelent reutilizabil de la apple.

Există multe modele de design pe care mărul le-a folosit pe parcursul dezvoltării kiturilor lor. Să încercăm să explorăm unele dintre aceste modele și să vedem cum le-am putea implementa.

Piscina obiectelor

Grupul de obiecte este un model care reutilizează un set de obiecte inițializate.

Atunci când un client al grupului solicită un obiect, un pool va returna un articol efectiv care este gata de a fi reutilizat, în loc să creeze o nouă instanță. Când clientul a terminat de utilizat obiectul, acesta returnează obiectul în pool, astfel încât să poată fi reutilizat ulterior.

Pool-urile de obiecte sunt utilizate pentru performanță, deoarece obiectele obținute și returnate la un pool nu sunt de fapt create sau distruse în acest moment. Prin urmare, economisind o mulțime de performanțe.

UITableView ne poate oferi o modalitate excelentă de a înțelege utilizarea și implementarea modelului de pool de obiecte.

Modul în care funcționează UITableView este că ia celulele care sunt împinse de pe ecran și apoi le reutilizează pentru celulele viitoare.

Implementarea rapidă a grupului de obiecte

Să încercăm să furnizăm o implementare a pool-ului de obiecte pentru iOS.

În primul rând, trebuie să creăm un protocol pe care să-l putem utiliza pentru a restricționa elementele noastre generice. Deoarece vom oferi celule reutilizabile pentru o vizualizare în tabel, să-l numim Reutilizabile

Putem adăuga prepareForReuse la protocol și să-l apelăm atunci când elementul este reutilizat din pool pentru a oferi curățarea necesară a obiectului înainte de a apărea din nou pe ecran.

Un UITableViewCell atunci ar fi pur și simplu un UIView care este conform cu Reutilizabile

Haideți să începem să punem în aplicare obiectul nostru responsabil pentru colectare, cum ar fi următoarele:

Clasa noastră de obiecte are nevoie de o funcție din fabrică care știe să creeze un articol generic nou.

Avem nevoie de variabila maxElementCount pe care o va folosi vizualizarea tabelului pentru a oferi numărul maxim de celule care vor fi afișate pe ecran în același timp. Deoarece iOS are deja un delegat pentru numărul de articole dintr-o secțiune, împreună cu heightForRowInSection, furnizarea acestei valori va fi ușoară.

În grupul de obiecte avem nevoie de două metode, una este de a desena un element și una de a elibera obiectul pentru a fi refolosit. În exemplul vizualizării tabelului, vom elibera obiectul celulei atunci când celula va trece de pe ecran.

Să folosim un tablou simplu care să conțină elementele lansate în prezent și să le reutilizăm atunci când sunt disponibile sau să le creăm noi cu funcția noastră din fabrică.

Când funcția dequeueReusableCell ar fi apelată atunci UITableView ar fi pur și simplu atras un obiect din pool-ul său.

Întrucât UITableView este pur și simplu o subclasă a UIScrollView, am putea ști cu ușurință când o celulă este în afara ecranului, prin urmare, putem elibera pur și simplu obiectul celulei în poolul reutilizabil.

Mai jos este funcția care este apelată atunci când celula iese pe ecran.

Modelul Singleton

Modelul singleton este un model folosit pentru a crea o singură instanță a unui anumit obiect. Toate trimiterile ulterioare la obiectul se referă la aceeași instanță de bază. Singleton-urile sunt utilizate atunci când are sens ca un singur obiect să ofere acces la o resursă globală.

Un obiect singleton poate fi creat pur și simplu în mod rapid

Implementarea rapidă a Singleton

Apple folosește singleton-uri în multe cazuri, unele dintre ele sunt NSFileManager, NSApplication și inUIApplication.

Când un client solicită obiectului o instanță, acesta primește o instanță partajată. Acest obiect este creat leneș la prima solicitare.

Putem folosi Singletons în codul nostru pentru a evita re-alocarea mai multor instanțe ale unei instanțe, prin urmare, economisirea performanței. Trebuie să fim conștienți, însă, că singletonii pot cauza probleme în unele cazuri și ar trebui folosiți cu atenție și nu trebuie suprautilizați.

  • Utilizați clase Singleton pentru situațiile în care are sens ca un singur obiect să ofere acces la o resursă globală.
  • Nu uitați că clasele Singleton nu pot fi subclase.
  • Singletonii pot ascunde dependențe, în general, ar trebui să vizăm arhitectura software care are dependențe minime între clase.

Model de observator

Tiparul de observator este folosit pentru a publica modificările de stare a obiectului. Alte obiecte se pot abona și pot fi notificate cu privire la modificări.

Interacțiunea poate avea loc între obiecte fără ca aceștia să fie nevoiți să se cunoască unul despre celălalt, ceea ce face ca subiectul și observatorii să se cupleze.

Cum folosește Apple modelul de observator?

notificări

Apple folosește modelul Observer pe obiectele NSNotificationCenter postează notificările către NSNotificationCenter, identificând notificarea cu un șir global. Obiectul Observator poate asculta această notificare și obține modificările obiectului. Postarea unei notificări se face în mod sincron.

Putem folosi inNSNotificationCenter codul nostru pentru a vă abona la notificările sistemului sau a publica și abona la notificări personalizate.

NSNotificationCenter este foarte drăguț, dar să încercăm să scriem o implementare personalizată pentru modelul de observator în Swift, astfel încât să avem o înțelegere mai profundă a acestui model.

Implementarea rapidă a modelului de observator

folosire

In concluzie

Apple utilizează modele de proiectare în iOS în toate API-urile lor. În acest articol, am explorat modul în care au implementat aceste tipare și am oferit implementarea utilizând modele rapide pentru Obiecte, Singleton și Patroni de observare.

Înțelegerea modelelor de design este foarte important pentru fiecare dezvoltator care caută coduri și arhitectură curate. Dacă doriți să aflați mai multe despre modelele de design și cum pot fi implementate cu ușurință pe iOS, asigurați-vă că verificați acest articol care simplifică implementarea lor în Swift.

Sper că v-a plăcut această postare și acest lucru va deveni util pentru baza dvs. de cod.

Asigurați-vă că aplaudați și partajați-o pentru a vă prezenta sprijinul.

Dacă aveți întrebări sau comentarii, nu ezitați să lăsați o notă aici sau trimiteți-mi un e-mail la arlindaliu.dev@gmail.com.