A Apple recomenda declarar uma propriedade BOOL desta forma:
@property (nonatomic, assign, getter=isWorking) BOOL working;
Como estou usando propriedades Objective-C 2.0 e notação de ponto, eu acesso essa propriedade usando self.working
. Sei que também poderia usar [self isWorking]
- mas não preciso.
Portanto, como estou usando a notação de ponto em todos os lugares, por que devo definir uma propriedade extra? Estaria tudo bem simplesmente escrever
@property (nonatomic, assign) BOOL working;
Ou eu tenho alguma vantagem escrevendo getter=isWorking
no meu caso (uso de notação de ponto)?
Obrigado!
objective-c
ios
properties
Patrick
fonte
fonte
Respostas:
A Apple simplesmente recomenda declarar um
isX
getter para fins estilísticos. Não importa se você personaliza o nome do getter ou não, contanto que use a notação de ponto ou a notação de mensagem com o nome correto. Se você vai usar a notação de ponto, não faz diferença, você ainda acessa pelo nome da propriedade:Ou
fonte
isX
getters, mas o Xcode não é capaz de listá-los no pop-up de preenchimento automático. (No meu exemplo)working
está listado lá, masisWorking
não está. Portanto, não vejo nenhum benefício em declarar getters BOOL. Tenho que fazer mais para poder usá-los (declarar o getter), mas obtenho menos (sem preenchimento automático).A Apple recomenda para fins estilísticos. Se você escrever este código:
Então você não pode usar [object isWorking].
Ele mostrará um erro. Mas se você usar o código abaixo significa
Portanto, você pode usar [object isWorking].
fonte
Não há benefício em usar propriedades com tipos primitivos.
@property
é usado com pilha alocadaNSObjects
comoNSString*
,NSNumber*
,UIButton*
, e etc, porque assessores memória gerenciada são criados de forma gratuita. Quando você cria umBOOL
, o valor é sempre alocado na pilha e não requer nenhum acessador especial para evitar vazamento de memória.isWorking
é simplesmente a maneira popular de expressar o estado de um valor booleano.Em outra linguagem OO, você faria uma variável
private bool working;
e dois acessores:SetWorking
para o setter eIsWorking
para o acessador.fonte
@property
destina-se a ser usado com tipos primitivos e, apenas por motivos de consistência, tem vantagens significativas. Além disso, alguns tipos primitivos (tipos de 64 bits em algumas CPUs de 32 bits e tipos de 128 bits em muitas CPUs de 32 e 64 bits) não são atômicos na atribuição;@property
A atomicidade de também pode ser vantajosa nesses casos.atomic
enonatomic
?