Method Swizzling polega na zmianie implementacji istniejącego selectora w trakcie działania aplikacji. Oznacza to, że możemy w sposób dynamiczny zmienić zachowanie danej metody. Taki bajer możliwy jest dzięki wykorzystaniu środowiska wykonawczego języka Objective-C.

 

Slector wskazuje nazwę metody, która ma zostać wykonana w trakcie działania programu. Ostatecznie jest on zamieniany na typ string języka C.

 

Podmiana implementacji przydaje się, gdy chcemy zmienić zachowanie pewnej funkcji, do której nie mamy dostępu. Przykładem może być tutaj funkcja addSubview(view:) klasy UIView, za pomocą której możemy dodać nowy obiekt do hierachii widoków. Dla uproszczenia przykładu załóżmy, że chcemy w nowej implementacji umieścić prostą instrukcję print, która będzie wyświetlała w konsoli informację na jakim widoku operacja została wykonana. Użyjemy do tego rozszerzenia obiektu UIView:

 

 

A tak będzie wyglądało użycie:

 

 

Takie rozwiązanie jest jak najbardziej poprawne, minusem jest jednak fakt, że nowa implementacja będzie stosowana wyłącznie w kodzie, który sami napiszemy. Wszystkie biblioteki systemowe oraz zewnętrzne w dalszym ciągu będą korzystały z implementacji bazowej. Właśnie w takiej sytuacji przydaje się method swizzling.

Tak będzie wyglądała jedna z możliwych implementacji:

 

 

Wydawać się może, że takie wywołanie metody customAddSubview(view:) spowoduje, że program wpadnie w pętlę. W rzeczywistości jednak selektor customAddSubview(view:) wywoływany w wierszu nr 4 będzie w wyniku dokonanej podmiany wskazywał na oryginalną implementacje addSubView(view:). Dzięki takiemu rozwiązaniu możemy zachować wszystkie podstawowe funkcjonalności, jednocześnie dodając nowe według potrzeby. Bez wywołania podstawowej wersji podmienianej metody, ryzykujemy, że w którymś momencie program nie będzie działał zgodnie z założeniami. W naszym przypadku poszczególne widoki nie zostaną dodane do obiektu UIViewController, przez co przy starcie aplikacji zobaczymy tylko czarny ekran. Warto o tym pamiętać zanim zaczniemy mieszać w bibliotekach systemowych 🤓,

Na koniec przykład wykorzystania podmiany metod:

 

 

 

Słowo na drogę

 

I to właściwie tyle. Method swizzling może okazać się bardzo przydatne, ale należy korzystać z tej techniki z rozwagą. Niewłaściwe zastosowanie może doprowadzić do nieprzewidzianych efektów i trudnych to wyśledzenia bugów. Mimo wszystko warto mieć kolejne narzędzie do pracy nad naszymi aplikacjami. Do usłyszenia 🧐.


 

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *