Puis-je utiliser une catégorie de classe pour remplacer une méthode qui est déjà implémentée à l'aide d'une catégorie? Comme ça:
1) Méthode originale
-(BOOL) method {
return true;
}
2) Méthode remplacée
-(BOOL) method {
NSLog(@"error?");
return true;
}
Cela fonctionnera-t-il ou est-ce illégal?
la source
Vous pouvez le faire en adaptant l' approche de cluster de classes ou en utilisant la technique de swizzling de méthodes .
Sinon, le comportement de deux ou plusieurs méthodes catégorisées n'est pas défini
la source
L'ancien lien de documentation est mort; le meilleur remplacement que j'ai pu trouver était ici: Apple Docs :
C'est Apple qui utilise une touche plus légère, mais le point principal est le même: vous invitez au désastre, car le comportement imprévisible est silencieux.
la source
Il est important de noter qu'une catégorie peut également être utilisée pour remplacer des méthodes existantes dans la classe de base (par exemple, la méthode d'entraînement de la classe Car), mais vous ne devriez jamais faire cela. Le problème est que les catégories sont une structure organisationnelle plate. Si vous remplacez une méthode existante dans Car + Maintenance.m et que vous décidez ensuite de modifier à nouveau son comportement avec une autre catégorie, Objective-C n'a aucun moyen de savoir quelle implémentation utiliser. Le sous-classement est presque toujours une meilleure option dans une telle situation.
À partir de ce didacticiel, http://rypress.com/tutorials/objective-c/categories
la source