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
Foi útil?

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.

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