Objetivo-C:Tornando iVars @public ou @synthesizing @properties para eles?Quando devo usar propriedades?
-
13-11-2019 - |
Pergunta
Tenho algumas variáveis de instância em minha classe que gostaria que estivessem acessíveis em qualquer lugar.Igual a:
@interface SomeObject : NSObject
{
@public
NSString *someString;
}
@end
@implementation SomeObject
@end
Posso acessar a propriedade da instância usando o ->
sintaxe como abaixo, como eu faria em C++:
someObjectInstance->someString
Devo fazer um imóvel para someString
quando tudo que eu quero é que seja acessível ao mundo exterior?eu criaria um @property
para someString
na minha interface e @synthesize
na minha implementação, o que me permitiria acessá-lo usando a sintaxe de ponto.
Solução
De modo geral, se quiser expor dados, você deve usar propriedades.Tornar públicas as variáveis de instância é uma má ideia em geral.
Outras dicas
É a maneira mais orientada a objetos de fazer isso porque, ao usar uma propriedade, você pode alterar o getter/setter posteriormente (em vez de sintetizá-lo) se quiser que ele faça outra coisa.
Sim, porque o que você está fazendo quando faz disso um @property
está orientando as pessoas que o usam para ligar para o setSomeString
e someString
métodos, com efeito.Mesmo se você estiver @synthesize
Ao usá-los, é melhor para a qualidade do seu código usar os métodos, porque você poderia altere-os se precisar.Se você estiver usando apenas a referência de ponteiro, se precisar interceptar acessos, não conseguirá.