Lorsque vous implémentez une catégorie d'une classe dans un fichier, toutes les instances de cette classe seront de la catégorie par défaut?
Je suis nouveau à Objective-C et j'essaie de faire mon OffreTextView non sélectionnable. Je suis tombé sur cette réponse en utilisant une catégorie: https://stackoverflow.com/a/8013538/1533240 p>
Quelle est la solution suivante: P>
@implementation UITextView (DisableCopyPaste) -(BOOL) canBecomeFirstResponder { return NO; } @end
3 Réponses :
Vous avez mal compris le point de catégories. Catégories Ajouter des méthodes à une classe existante. Ils ne doivent jamais être utilisés pour remplacer les méthodes existantes. Ce faisant est un comportement indéfini (techniquement non défini dans un cas, mais vous ne pouvez pas prédire ce cas, vous devez donc supposer que cela s'applique). P>
Si vous devez remplacer les méthodes, vous devez sous-classe, ne pas utiliser de catégories. Voir la meilleure réponse à la question que vous avez liée. P>
Ah d'accord. Merci! J'essayais juste de voir si je peux m'éloigner de ne pas faire une nouvelle classe et que cette réponse est une bonne réponse, je voulais l'essayer. = P merci beaucoup pour la perspicacité! Je vais probablement utiliser une sous-classe alors.
Ce que vous devez faire est de déclarer tel que: p> Ensuite dans Vous pouvez faire deux choses, p> catégorie code> dans l'en-tête
.h code> fichier:
.m code> définir comme p>
.h code> et
.m code> (respectivement), vous en avez besoin. LI>
ol> p>
L'interface n'est pas nécessaire, car cette catégorie est prime i> (en réalité, clowbering) une méthode existante.
Lorsque vous implémentez une catégorie d'une classe dans un fichier, tous les Les instances de cette classe soient de la catégorie par défaut? P> blockQuote>
oui. strong> Si vous créez une catégorie, Les méthodes de cette catégorie sont ajoutées à la classe . Par exemple, si vous créez une catégorie sur Nstring qui renvoie la somme de contrôle d'une chaîne, vous pouvez utiliser cette méthode sur toute instance em> de Nstring. P> J'ai ajouté l'extrait de mon code, mais cela ne semble pas fonctionner dans ce cas, je peux toujours sélectionner le texte. P> blockQuote>
n'utilise pas de catégories pour remplacer les méthodes existantes. strong> p>
Pour une chose, c'est une mauvaise forme. Vous êtes efficacement changer em> le comportement de la classe d'une manière que l'auteur ne s'attendait pas. Pour une autre chose, vous ne pouvez pas compter sur le dérogation au travail - l'ordre dans lequel les catégories sont ajoutées aux classes n'est pas définie, de sorte que vous ne savez jamais si certains les autres em> peuvent venir et remplacer la méthode que vous avez essayée de remplacer. C'est tout simplement pas fiable. Si vous devez remplacer les méthodes, créez une sous-classe à la place. strong> p>
Veuillez éditer votre question pour décrire «mais cela ne semble pas fonctionner.» plus précisement.
@Joshcaswell désolé! fait un peu plus clair
Il peut ne pas répondre à votre question, mais ma réponse ici peut vous donner une meilleure compréhension de
Objective-C Catégories Code> Stackoverflow.com/Questtions/12260729/...