Como acabei de me deparar com esse problema ao editar o código legado, quero fazer anotações adicionais às respostas existentes de que precisamos estar cientes.
Mesmo com uma versão mais recente do compilador, às vezes faz diferença se você omitir @synthesize propertyName
ou não .
No caso, você declara uma variável de instância sem sublinhado enquanto ainda a sintetiza, como:
Cabeçalho:
@interface SomeClass : NSObject {
int someInt;
}
@property int someInt;
@end
Implementação:
@implementation SomeClass
@synthesize someInt;
@end
self.someInt
acessará a mesma variável que someInt
. Não usar um sublinhado principal para ivars não segue as convenções de nomenclatura, mas acabei de entrar em uma situação em que precisava ler e modificar esse código.
Mas se agora você pensa "Ei, @synthesize não é mais importante porque usamos um compilador mais novo", você está errado! Sua classe resultará em dois ivars , someInt
mais uma _someInt
variável gerada automaticamente . Portanto, self.someInt
e someInt
não abordará mais as mesmas variáveis. Se você não espera um comportamento como o meu, isso pode causar dor de cabeça para você descobrir.