Pergunta

Eu tenho uma aplicação que estou a escrever, que usa exclusivamente @propriedades.Eu não tenho uma ivar declarado em tudo em qualquer um dos meus arquivos de classe.Como eu a entendo ivars não são mais necessários, com a introdução da @propriedade.Sou eu de codificação de acordo com as melhores práticas?Isso vai acabar mordendo-me na proverbial bunda no longo prazo?Eu tenho lido análises sobre o que é "certo" e "errado"...

Foi útil?

Solução

Eu geralmente não declarar ivars, qualquer um. Eu, muitas vezes, uso @synthesize foo = foo_; embora para impedir o acesso direto quando eu quis dizer através de método ou vice-versa. E eu sempre permitir que o compilador automaticamente sintetizar o ivar com o _ prefixo (que evita o acesso direto, como por atingiu frase).

E, como o Caleb disse, ainda há ivars a flutuar, você simplesmente não declarar explicitamente 'em, a menos que você realmente quer (o que, realmente, não como exposto ivars nos cabeçalhos não são úteis para os clientes da classe, se a sua API é projetada de forma adequada).

Eu também acho que o hype sobre "apenas usar o acesso direto em init/dealloc, use setter/getter em qualquer outro lugar" para ser, em grande parte exageradas e, assim, basta usar o setter/getter em todos os lugares.A realidade é que se você tiver observadores durante a inicialização/desalocação, você já está lavado;o estado do objeto é, por definição, não definido durante a construção/destruição e, portanto, um observador não pode, possivelmente, a razão corretamente sobre o estado.


Como Calebe, aponta outra razão para usar o direct ivar acesso em init/dealloc é evitar subclasses implementam personalizado setter/getter lógica que pode barf devido ao estado indefinido do objeto durante o init/dealloc.

Enquanto isso pode ser verdade, considero-a uma terrível falha de arquitectura para implementar setters/getters com o comportamento personalizado.Isso é frágil e torna significativamente mais difícil para refatorar o código ao longo do tempo.Assim, tal comportamento personalizado, muitas vezes, têm de dependência em outro estado dentro do objeto e que a dependência leva, então, a ordem de dependências nas alterações de estado que não são refletidas pela aparente simples @property declaração.

I. e.se o seu setters e getters são escritos de tal forma que foo.bar = bad; não pode ser executado em qualquer tempo foo, e , em seguida, seu código é preso.

Outras dicas

Não é tanto que as variáveis de instância não são necessárias.É apenas uma variável de instância declarações não são necessárias.Dada uma propriedade e uma instrução @synthesize, o compilador cuidará de criar a variável de instância, juntamente com os métodos de acesso apropriados.

Não há nada de errado em usar propriedades exclusivamente.Eles simplificam o gerenciamento de memória.Também não há nada de errado em usar IVARs sem propriedades, se é isso que você quer.Se você quiser usar propriedades, mas não quer anunciar os acessadores para o resto do mundo (ou seja, manter encapsulamento), considere declarar suas propriedades não públicas em uma extensão de classe (basicamente uma categoria anônima em seu arquivo de implementação). .

Usando IVARs Certamente não está errado, por mais que as melhores práticas agora façam pressionadas para usar @Property.

Um lugar onde você pode querer usar um IVAR é quando você deseja declarar uma propriedade protegida.Você declara a propriedade no arquivo .m para uma aula e declara seu ivar correspondente no .h com a diretiva @protected.Isso permitirá que você tenha um acesso protegido na subclasse.Não há alternativa para acesso protegido aos membros.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top