Em sua interface, você pode declarar formalmente uma variável de instância entre as chaves, ou por meio de @property
fora das chaves, ou ambos. De qualquer forma, eles se tornam atributos da classe. A diferença é que, se você declarar @property
, poderá implementar o using @synthesize
, que codifica automaticamente seu getter / setter para você. O setter autocodificador inicializa inteiros e flutua para zero, por exemplo. SE você declarar uma variável de instância e NÃO especificar uma correspondente @property
, não poderá usar @synthesize
e deverá escrever seu próprio getter / setter.
Você sempre pode substituir o getter / setter codificado automaticamente especificando o seu próprio. Isso geralmente é feito com a managedObjectContext
propriedade que é carregada lentamente. Assim, você declara seu managedObjectContext
como uma propriedade, mas também escreve um-(NSManagedObjectContext *)managedObjectContext
método. Lembre-se de que um método, que tem o mesmo nome de uma variável / propriedade de instância, é o método "getter".
O @property
método de declaração também permite outras opções, como retain
e readonly
, que o método de declaração de variável de instância não permite. Basicamente, ivar
é a maneira antiga, e @property
estende-a e torna-a mais sofisticada / fácil. Você pode se referir a qualquer um deles usando o self. prefixo, ou não, não importa, desde que o nome seja único para aquela classe. Caso contrário, se sua superclasse tiver o mesmo nome de uma propriedade que você, você terá que dizer self.name ou super.name para especificar de qual nome está falando.
Assim, você verá cada vez menos pessoas declarando ivar
s entre colchetes e, em vez disso, passar a apenas especificar @property
e depois fazer @synthesize
. Você não pode fazer @synthesize
em sua implementação sem um correspondente @property
. O Sintetizador só sabe que tipo de atributo é a partir da @property
especificação. A instrução de síntese também permite renomear propriedades, para que você possa se referir a uma propriedade por um nome (abreviação) dentro do seu código, mas fora do arquivo .h use o nome completo. No entanto, com o autocomplete muito legal que o XCode tem agora, isso é menos uma vantagem, mas ainda está lá.
Espero que isso ajude a esclarecer toda a confusão e desinformação que está circulando por aí.