Propriedade iVar, access via auto?

Eu entendo que ao acessar methods setter / getter para propriedades eu deveria estar usando [ self setThisValue:@"a"]; em vez de thisValue = @"a"; No entanto, com o exemplo abaixo, posso ver isso adicionando auto documentos que estou enviando uma mensagem para uma propriedade iVar em vez de uma variável com escopo local, mas faz mais alguma coisa neste caso?

 @interface CustomController : UIViewController { NSMutableArray *foundList; } @property(nonatomic, retain) NSMutableArray *foundList; @end 

.

 [[self foundList] addObject:eachObject]; // I usually write this ... 

OU

 [foundList addObject:eachObject]; 

gary.

Se você tem uma propriedade definida para um ivar, você deve usá-la ao invés de acessar o ivar diretamente. Isso permite que as subclasss sobreponham o setter / getter e façam algo diferente apenas buscando o valor do ivar.

A única exceção está nos methods init e no dealloc.

Usando

 [[self foundArray] addObject:eachObject]; 

você acabou de adicionar uma chamada extra ao método getter, o que é desnecessário na maioria dos casos aqui, eu acho. Por outro lado, a menos que você implemente seu próprio getter customizado e faça algumas coisas estranhas, a sobrecarga desse constructo é muito pequena, então, na prática, é apenas uma questão de estilo na minha opinião. (Eu pessoalmente não usaria propriedade aqui)

O método do acessador é muito conveniente se você alguma vez criar uma subclass ou fizer com que outras pessoas reutilizem seu código e queiram anular sua funcionalidade.

usando self.ivar também tem alguns problemas com a limpeza de memory. esp. você tem uma propriedade de outra class. Então você pega qualquer novo object e quer mudar a referência para o self.ivar = newObject. se você não usa self.ivar, pode ter um access incorreto, quando newObject também pertence a outros. O setter padrão, verifica a referência, se não for nulo, libera o valor antigo e configura o novo ivar para seu novo valor. Eu estava usando sem um object sem eu hoje e caí nesse problema. Em suma, se o object é compartilhado, use self.ivar …