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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top