@synthesize alguma coisa = _alguma coisa;criar automaticamente a variável _alguma coisa também?
-
13-12-2019 - |
Pergunta
Entendo que @synthesize cria automaticamente os getters e setters para uma variável de instância.Quando especifico a parte = _something, entendo que isso informa ao compilador/tempo de execução que desejo que ele use uma variável de apoio específica para os getters/setters.
O Objective-C cria automaticamente a variável _something junto com meus getters/setters ou devo definir essa variável de instância em meu arquivo de interface/implementação?
Solução
A questão é se @property no arquivo de cabeçalho e @synthesize na implementação cria o ivar subjacente ou se o ivar deve ser listado no arquivo de cabeçalho.Exemplo, no arquivo de cabeçalho:
@interface SomeClass : NSObject {
NSString *_someString; // Is this needed???
}
@property NSString *someString;
e na implementação:
@synthesize someString = _someString;
A resposta é que depende se você está ou não usando o tempo de execução legado ou moderno.No iOS você está sempre usando o tempo de execução moderno, então nunca precisa do NSString *_somestring
linha, mas esta questão é sobre o Mac OS X.Para Mac OS X, se você estiver usando um programa de 64 bits no Mac OS X 10.5 ou posterior, estará usando o tempo de execução moderno; caso contrário, estará usando o tempo de execução legado e precisará da linha extra em seu arquivo de cabeçalho.Como houve alguma desinformação postada, aqui está uma referência: Guia de programação em tempo de execução Objective-C.
Outras dicas
Desculpe, interpretando mal uma parte de sua pergunta.Se você fizer a parte @synthesize com o sublinhado, tudo bem.Não precisa definir explicitamente um ivar.