Esclarecimento de pequena sintaxe do Objetivo C
-
27-09-2019 - |
Pergunta
Eu tenho visto esse código na maior parte do tempo.Aqui existem dois nomes de variáveis definidos e na implementação são sintetizados por atribuição.Qual é o propósito de fazer algo assim?Como manter dois nomes de variáveis separados.Isso é uma espécie de convenção?
Teste.h
@interface Test {
id<something> _variable1;
}
@property (nonatomic, retain) id<something> variable2;
Teste.m
@synthesize variable2 = _variable1
Solução
Existe apenas uma variável.A coisa chamada variable2
é na verdade uma propriedade, que é basicamente um atalho sintático para um par de métodos get/set.Ao definir uma propriedade, você pode escrever os métodos get/set explicitamente...
- (void)setVariable2:(id<something>)value {
if (_variable1 != value) {
[_variable1 release];
_variable1 = [value retain];
}
}
- (id<something>)variable2 {
return _variable1;
}
...ou use o @synthesize
construa para gerar os métodos acima automaticamente, poupando assim muita digitação monótona.(Ele também emite código para liberar _variable1 na destruição do objeto, que não incluí aqui.)
Às vezes, porém, você pode querer implementar um ou outro desses métodos de forma diferente do padrão.Nesse caso, você escreveria o seu próprio.Você pode até misturar @synthesize
e uma versão personalizada de apenas um dos métodos.