J'ai une structure de classe du type UIViewControllerSubclass : UIViewController
, où la seule fonction de UIViewControllerSubclass est à #import UIViewController+Category.h
. La raison pour laquelle j'ai ajouté des méthodes dans une catégorie est que je peux aussi faire UITableViewControllerSubclass : UITableViewController
, qui sera également #import UIViewController+Category.h
. Comme nous le savons tous, ne vous répétez pas.Est-il possible de remplacer une méthode définie par la catégorie dans Objective-C?
Supposons maintenant que UIViewController + Category.h a la structure:
@interface UIViewController(Category)
- (void) method1;
- (void) method2;
@end
Comment est-il sûr de créer UIViewControllerSubclassSubclass : UIViewControllerSubclass
, qui remplacera method1
? Je suppose que cela fonctionnera à cause du passage du message d'Objective-C, mais pour une raison que j'ignore, mon intuition me dit que je me trompe.
Vous devez vous rappeler que Objective-C est "tapé par le canard". Si une classe prend en charge une méthode, vous pouvez l'invoquer (en toute sécurité), même si la méthode n'est pas définie dans le fichier .h de la classe. (Je ne sais pas si vous vous faufilez au-delà des vérifications du compilateur.) –