Ontwerppatronen verkennen die door Apple op iOS worden gebruikt

Ontwerppatronen zijn een cruciaal onderdeel van softwareontwerp, ze bieden een oplossing voor veel voorkomende problemen.
Apple gebruikt deze patronen overal in iOS-frameworks. In dit artikel zullen we bespreken hoe ontwerppatronen worden gebruikt in de interne Apple API's en hoe u kunt profiteren van deze implementaties.

We gebruiken iOS-frameworks zoals UIKit CoreLocation CoreBluetooth en vele anderen in onze dagelijkse ontwikkeling. Componenten zoals UITableView UIStackView zijn allemaal geschreven met behulp van een geweldig herbruikbaar ontwerp van Apple.

Apple heeft veel ontwerppatronen gebruikt tijdens de ontwikkeling van hun kits. Laten we proberen enkele van deze patronen te verkennen en te kijken hoe we ze kunnen implementeren.

Object zwembad

De objectpool is een patroon dat een set geïnitialiseerde objecten hergebruikt.

Wanneer een client van de pool een object aanvraagt, retourneert een pool een daadwerkelijk item dat klaar is om opnieuw te worden gebruikt in plaats van een nieuwe instantie te maken. Wanneer de client het object heeft gebruikt, retourneert het het object naar de pool zodat het op een later tijdstip opnieuw kan worden gebruikt.

Objectpools worden gebruikt voor prestaties, omdat objecten die zijn verkregen uit en worden teruggebracht naar een pool op dit moment niet worden gemaakt of vernietigd. Daarom bespaart u veel prestaties.

UITableView kan ons een geweldige manier bieden om het gebruik en de implementatie van het objectpoolpatroon te begrijpen.

De manier waarop UITableView werkt, is dat het de cellen die van het scherm worden geduwd neemt en vervolgens opnieuw gebruikt voor de komende cellen.

Snelle implementatie van objectpool

Laten we proberen een objectpool-implementatie voor iOS te bieden.

Ten eerste moeten we een protocol maken dat we kunnen gebruiken om onze generieke poolitems te beperken. Omdat we herbruikbare cellen voor een tabelweergave gaan bieden, laten we het Herbruikbaar noemen

We kunnen preparForReuse aan het protocol toevoegen en het aanroepen wanneer het element uit de pool wordt hergebruikt om het object de benodigde opschoning te bieden voordat het weer op het scherm verschijnt.

Een UITableViewCell zou dan gewoon een UIView zijn die voldoet aan Herbruikbaar

Laten we beginnen met het implementeren van ons object dat verantwoordelijk is voor pooling, zoals hieronder:

Onze Object Pool Class heeft een fabrieksfunctie nodig die weet hoe een nieuw generiek artikel te maken.

We hebben de variabele maxElementCount nodig die de tabelweergave zal gebruiken om het maximale aantal cellen te bieden dat tegelijkertijd op het scherm wordt weergegeven. Aangezien iOS al een gemachtigde heeft voor het aantal items in een sectie samen met heightForRowInSection, is deze waarde eenvoudig.

In de objectpool hebben we twee methoden nodig, een is om een ​​item te tekenen en een om het te hergebruiken object vrij te geven. In het voorbeeld van de tabelweergave zouden we het celobject vrijgeven wanneer de cel offscreen zou gaan.

Laten we een eenvoudige array gebruiken die de momenteel vrijgegeven elementen bevat en ze hergebruiken indien beschikbaar of nieuwe maken met onze fabrieksfunctie.

Wanneer de functie dequeueReusableCell zou worden aangeroepen, zouUITUITView eenvoudig een object uit de pool tekenen.

Omdat UITableView gewoon een subklasse van UIScrollView is, konden we gemakkelijk weten wanneer een cel buiten beeld was, daarom kunnen we het celobject eenvoudig vrijgeven aan de herbruikbare pool.

Hieronder staat de functie die wordt aangeroepen wanneer de cel van het scherm afgaat.

Singleton patroon

Het singleton-patroon is een patroon dat wordt gebruikt om slechts één instantie van een bepaald object te maken. Alle verdere verwijzingen naar de objectverwijzing naar dezelfde onderliggende instantie. Singletons worden gebruikt wanneer het logisch is dat een enkel object toegang geeft tot een wereldwijde bron.

Een singleton-object kan eenvoudig worden gemaakt in snel als volgt

Snelle implementatie van Singleton

Apple gebruikt in veel gevallen singletons, sommige hiervan zijn NSFileManager, NSApplication en inUIApplication.

Wanneer een client het object om een ​​exemplaar vraagt, krijgt het een gedeeld exemplaar. Dit object is lui gemaakt op het eerste verzoek.

We kunnen Singletons in onze code gebruiken om te voorkomen dat meerdere instanties van een instantie opnieuw worden toegewezen, waardoor prestaties worden bespaard. We moeten ons er echter van bewust zijn dat singletons in sommige gevallen problemen kunnen veroorzaken en zorgvuldig moeten worden gebruikt en niet te veel moeten worden gebruikt.

  • Gebruik Singleton-klassen voor situaties waarbij het zinvol is dat een enkel object toegang geeft tot een wereldwijde bron.
  • Vergeet niet dat Singleton-lessen niet in een subklasse kunnen worden ingedeeld.
  • Singletons kunnen afhankelijkheden verbergen, in het algemeen moeten we streven naar software-architectuur die minimale afhankelijkheden tussen klassen heeft.

Waarnemer patroon

Het waarnemerspatroon wordt gebruikt om objectstatuswijzigingen te publiceren. Andere objecten kunnen zich inschrijven en op de hoogte worden gebracht van de wijzigingen.

Interactie kan plaatsvinden tussen objecten zonder dat ze van elkaar moeten weten, dit maakt onderwerp en waarnemers losjes gekoppeld.

Hoe gebruikt de Apple waarnemerspatroon?

meldingen

Apple gebruikt Observer-patroon op NSNotificationCenter Objects post de meldingen naar NSNotificationCenter door de melding te identificeren met een globale tekenreeks. Observer Object kan naar deze melding luisteren en de objectwijzigingen krijgen. Het plaatsen van een melding gebeurt op een synchrone manier.

We kunnen inNSNotificationCenter onze code gebruiken om u te abonneren op systeemmeldingen of te publiceren en u te abonneren op aangepaste meldingen.

NSNotificationCenter is echt heel leuk, maar laten we proberen een aangepaste implementatie voor het waarnemerspatroon in Swift te schrijven, zodat we dit patroon beter begrijpen.

Snelle implementatie van waarnemerspatroon

Gebruik

Ten slotte

Apple maakt veel gebruik van ontwerppatronen in iOS in al hun API's. In dit artikel hebben we onderzocht hoe ze deze patronen hebben geïmplementeerd en hebben we implementatie geboden met behulp van Swift voor Objectpool-, Singleton- en Observer-patronen.

Inzicht in ontwerppatronen is erg belangrijk voor elke ontwikkelaar die op zoek is naar schone code en architectuur. Als je meer wilt weten over ontwerppatronen en hoe deze eenvoudig kunnen worden geïmplementeerd op iOS, lees dan dit artikel dat hun implementatie in Swift vereenvoudigt.

Ik hoop dat je dit bericht leuk vond en dat dit nuttig zal worden voor je codebasis.

Zorg ervoor dat je klapt en deelt om je steun te tonen.

Als je vragen of opmerkingen hebt, kun je hier een bericht achterlaten of een e-mail sturen naar arlindaliu.dev@gmail.com.