Ecrire getter et setter pour la variable BOOL

Évidemment, avec obj-c, il n'y a généralement aucune raison d'écrire des getters et des setters (merci à mr @synthesize ).

Alors maintenant, ayant besoin de faire exactement cela, j'ai rencontré le problème que je ne sais pas comment les écrire. : p

Je suis sûr que je ne vais probablement pas résoudre mon problème de la bonne manière – il serait beaucoup plus facile de simplement sous-classr mon object et tel – mais j'essaye d'écrire du code de catégorie pour append des propriétés parce que (au début) était plus rapide, et parce que je voulais apprendre à utiliser le code de catégorie dans mon application.

J'ai ça:

 -(BOOL)isMethodStep { return self.isMethodStep; } -(void)setIsMethodStep:(BOOL)theBoolean { if(self.isMethodStep != theBoolean){ self.isMethodStep = theBoolean; } } 

et je l'ai essayé sans la requête if dans le setter, mais aucun ne semble fonctionner. Le charger avec des points d'arrêt montre que, pour une raison quelconque, il est bloqué dans une boucle continue dans la méthode getter.

Est-ce que ce code est correct ou est-ce que je fais quelque chose de mal?

Merci Tom

Dans

 -(BOOL)isMethodStep { return self.isMethodStep; } 

return self.isMethodStep ; appelle la même méthode isMethodStep provoquant une boucle infinie. Même chose pour setter.

Utilisez simplement votre iVars directement dans vos implémentations de méthode d'accesseur:

 -(BOOL)isMethodStep { return isMethodStep; } -(void)setIsMethodStep:(BOOL)theBoolean { if(isMethodStep != theBoolean){ isMethodStep = theBoolean; } } 

Vous ne voulez pas utiliser le self. syntaxe de propriété dans le setter / getter, car cela invoque à nouveau le setter / getter, au lieu de l'assigner directement à la variable.

Vous devez juste dire:

 -(BOOL)isMethodStep { return isMethodStep; } -(void)setIsMethodStep:(BOOL)theBoolean { isMethodStep = theBoolean; } 

(en supposant que "isMethodStep" est le nom de votre variable). Je voudrais omettre le test dans la méthode setter aussi …