Czy mogę użyć kategorii klasy, aby przesłonić metodę, która została już zaimplementowana przy użyciu kategorii? Lubię to:
1) Oryginalna metoda
-(BOOL) method {
return true;
}
2) Metoda nadpisana
-(BOOL) method {
NSLog(@"error?");
return true;
}
Czy to zadziała, czy jest to nielegalne?
źródło
Możesz to zrobić, dostosowując podejście Class Cluster lub używając techniki zawijania metod.
W przeciwnym razie zachowanie dwóch lub więcej metod skategoryzowanych jest niezdefiniowane
źródło
Stary link do dokumentacji jest martwy; najlepszy zamiennik, jaki udało mi się znaleźć, był tutaj: Apple Docs :
To Apple używa lżejszego dotyku, ale główny punkt jest ten sam: zapraszasz do katastrofy, ponieważ nieprzewidywalne zachowanie jest ciche.
źródło
Należy zauważyć, że kategoria może być również używana do przesłonięcia istniejących metod w klasie bazowej (np. Metoda napędu klasy Car), ale nigdy nie należy tego robić. Problem w tym, że kategorie to płaska struktura organizacyjna. Jeśli zastąpisz istniejącą metodę w Car + Maintenance.m, a następnie zdecydujesz, że chcesz ponownie zmienić jej zachowanie z inną kategorią, nie ma sposobu, aby Objective-C wiedział, której implementacji użyć. W takiej sytuacji podklasy są prawie zawsze lepszą opcją.
Z tego samouczka http://rypress.com/tutorials/objective-c/categories
źródło