Apple recommande de déclarer une propriété BOOL de cette manière:
@property (nonatomic, assign, getter=isWorking) BOOL working;
Comme j'utilise les propriétés Objective-C 2.0 et la notation par points, j'accède à cette propriété en utilisant self.working
. Je sais que je pourrais aussi utiliser [self isWorking]
- mais je n'ai pas à le faire.
Donc, comme j'utilise la notation par points partout, pourquoi devrais-je définir une propriété supplémentaire? Serait-il correct d'écrire simplement
@property (nonatomic, assign) BOOL working;
Ou ai-je des avantages à écrire getter=isWorking
dans mon cas (utilisation de la notation par points)?
Merci!
objective-c
ios
properties
Patrick
la source
la source
Réponses:
Apple recommande simplement de déclarer un
isX
getter à des fins stylistiques. Peu importe que vous personnalisiez le nom du getter ou non, tant que vous utilisez la notation par points ou la notation de message avec le nom correct. Si vous allez utiliser la notation par points, cela ne fait aucune différence, vous y accédez toujours par le nom de la propriété:Ou
la source
isX
getters, mais Xcode n'est pas en mesure de les lister dans la fenêtre de saisie semi-automatique. (Dans mon exemple)working
est répertorié ici, maisisWorking
ne l'est pas. Je ne vois donc aucun avantage à déclarer des getters BOOL. Je dois faire plus pour pouvoir les utiliser (déclarer le getter) mais j'en reçois moins (pas d'auto-complétion).Apple recommande à des fins stylistiques.Si vous écrivez ce code:
Ensuite, vous ne pouvez pas utiliser [object isWorking].
Il affichera une erreur. Mais si vous utilisez le code ci-dessous, cela signifie
Vous pouvez donc utiliser [object isWorking].
la source
Il n'y a aucun avantage à utiliser des propriétés avec des types primitifs.
@property
est utilisé avec tas allouéNSObjects
commeNSString*
,NSNumber*
,UIButton*
et etc, parce que la mémoire gérée accesseurs sont créés gratuitement. Lorsque vous créez unBOOL
, la valeur est toujours allouée sur la pile et ne nécessite aucun accesseur spécial pour éviter les fuites de mémoire.isWorking
est simplement la manière courante d'exprimer l'état d'une valeur booléenne.Dans un autre langage OO, vous créeriez une variable
private bool working;
et deux accesseurs:SetWorking
pour le setter etIsWorking
pour l'accesseur.la source
@property
est très destiné à être utilisé avec des types primitifs et, pour des raisons de cohérence uniquement, présente des avantages significatifs. En outre, certains types primitifs (types 64 bits sur certains processeurs 32 bits et types 128 bits sur de nombreux processeurs 32 et 64 bits) sont non atomiques lors de l'affectation;@property
L 'atomicité de ce dernier peut également être avantageuse dans ces cas.atomic
nonatomic
attributs et ?