Qual é a diferença entre @property e @synthesize?
-
03-07-2019 - |
Pergunta
Como eu entendo, @synthesize realmente está gerando os getters e setters. Mas o que está @property então fazendo? É só configurar os parâmetros para essa função legal @synthesize mágica?
Solução
Você escreve @property no arquivo de cabeçalho
@property float value;
é equivalente a:
- (float)value;
- (void)setValue:(float)newValue;
Ele obter informações para outras classes, que a sua classe tem esse métodos
@synthesize phisicaly criar esses métodos na implementação de classe
Outras dicas
@property
declara o nome como uma propriedade. Isto significa que será acessível através da sintaxe de ponto (object.value
).
@synthetize
pode ser visto como uma macro, que cria os métodos get e set. É útil saber que você pode substituir esses métodos, mesmo se você digitar têm a @synthetize
no lugar.
@property
declara getter e / ou setter
@synthesize
implementa.
Há um equívoco comum que a directiva @synthesize é necessária a fim de implementar setters e getters criados com a directiva @property, mas este não é o caso. Usando a directiva @property sem @synthesize ainda irá gerar setters / getters e permitem que você use a notação de ponto. No entanto, deixando de fora a directiva @synthesize fará com que o compilador para gerar variáveis ??de instância correspondente com um caractere sublinhado levando, por exemplo a propriedade myVar terá uma variável de instância de _myVar.
Usando um sublinhado à esquerda é uma convenção comum que permite diferenciar entre propriedades e variáveis ??de instância. Também é comum para propriedades e variáveis ??de instância para compartilhar o mesmo nome, que é o que @synthesize faz por padrão.