2013-08-29 1 views
8

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.

+1

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.) –

Répondre

7

Tout devrait fonctionner correctement puisque la catégorie est appliquée à UIViewController, donc toutes les instances de UIViewController, y compris les sous-classes, auront accès aux méthodes. Il n'y a rien de dangereux à ce sujet; C'est ainsi que les catégories sont destinées à être appliquées.

+1

Je suppose que c'est juste "un sentiment" dangereux car la méthode de la catégorie n'est pas aussi étroitement couplée à la classe qu'une méthode d'instance. – paulrehkugler

Questions connexes