2013-08-29 8 views
8

Mam strukturę klasy typu UIViewControllerSubclass : UIViewController, gdzie jedyną funkcją klasy UIViewControllerSubclass jest #import UIViewController+Category.h. Powodem, dla którego dodałem metody w kategorii jest to, że mogę również zrobić UITableViewControllerSubclass : UITableViewController, który będzie również #import UIViewController+Category.h. Jak wszyscy wiemy, nie powtarzaj się.Czy można bezpiecznie zastąpić metodę zdefiniowaną w kategoriach w Objective-C?

Teraz zakładamy, że UIViewController + Category.h ma strukturę:

@interface UIViewController(Category) 
- (void) method1; 
- (void) method2; 
@end 

Jak bezpieczny jest to, aby stworzyć UIViewControllerSubclassSubclass : UIViewControllerSubclass, który będzie zastąpić method1? Zakładam, że to zadziała, ponieważ wiadomość od Celu C przeminie, ale z jakiegoś powodu intuicja podpowiada mi, że robię to źle.

+1

Należy pamiętać, że Objective-C jest "typowany przez kaczkę". Jeśli klasa obsługuje metodę, możesz (bezpiecznie) ją wywołać, nawet jeśli ta metoda nie jest zdefiniowana w pliku klasy .h. (Sposób wkradnięcia się poza sprawdzanie kompilatora zależy od ciebie.) –

Odpowiedz

7

Wszystko powinno działać poprawnie, ponieważ kategoria jest stosowana do UIViewController, więc wszystkie wystąpienia UIViewController, w tym podklasy, będą miały dostęp do metod. Nie ma w tym nic niebezpiecznego; w ten sposób mają być stosowane kategorie.

+1

Przypuszczam, że po prostu "czuje się" niebezpiecznie, ponieważ metoda kategorii nie jest tak ściśle związana z klasą, jak metoda instancji. – paulrehkugler

Powiązane problemy