Talvez um assunto que tenha ficado meio obscuro nas última postagens diga respeito às propriedades. E realmente, entender todas as formas de declaração destas não é algo tão trivial em Objective-C.
As propriedades foram criadas no Objective-C 2.0 e possuem como sintaxe básica a declaração da propriedade no .h e a sua sintetização no .m
Dessa forma já é possível ter métodos getter e setter adequados para a maioria dos casos, mas não todos. Assim, criaram-se atributos para as propriedades que sinalizam como o código da @property deverá ser gerado.
É importante ressaltar que é possível inserir qualquer quantidade de número de atributos de propriedade, bastando inserir uma vírgula entre elas. Além disso, qualquer um desses estados podem ser implementados manualmente. Os atributos para a propriedade possíveis são:
- @property(getter = nomeVar)
- Informamos aqui qual será o método em questão que será o getter;
- Lembre-se de implementar em seu getter todos os comportamentos que você inseriu na assinatura de sua @property.
- Pela convenção do Objective-C, getters devem possuir o mesmo nome da variável se o prefixo get.
- @property(setter = setNomeVar)
- Informamos aqui qual será o método em questão que será o setter.
- @property(readwrite)
- A propriedade, por padrão, já vem definida com esse estado. Isso diz à propriedade que ela irá ser LIDA e SOBRESCRITA.
- @property(readonly)
- A propriedade pode apenas ser lida e não sobrescrita, ou seja, o usuário terá acesso somente ao GETTER.
- @property(assign)
- A propriedade, por padrão, já vem definida com esse estado. Este define, basicamente, que o setter será apenas uma atribuição da variável recebida na variável da instância.
- @property(retain)
- Marcar a propriedade com retain significa que a instância recebida em SETTER terá seu retain count incrementado em 1, ou seja, tomaremos posse do objeto atribuído;
- Em 95% que estamos recebendo uma referência, implementamos esse estado na propriedade.
- @property(copy)
- Estabelecemos nesse caso que faremos uma cópia do objeto atribuído no SETTER.
- @property(atomic)
- A propriedade, por padrão, já vem definida com esse estado. Quando uma property esta definida como atomic, seu getter e setter serão implementados levando em consideração um ambiente multithread. Ou seja, possuirão mutexes que impedirão leitura e escrita mútua pelas threads por meio da directiva @synchronize.
- @property(nonatomic)
- Marcamos a propriedade com esse estado quando não queremos que ela possua mutexes que evitem leitura e escrita mútua. É certo marcar a property com esse atributo quando temos certeza que nossa classe não será utilizada em um ambiente multithread.
Além das configurações mencionadas, ainda podemos configurar o nosso @synthesize. Observe:
- @synthesize varName = _varName
- Quando a propriedade não possui o mesmo nome da variável, devemos realizar essa operação, onde varName é o nome da propriedade e _varName é o nome da variável.
- @dynamic
- Usamos esta directiva no lugar de @synthesize quando queremos que a nossa propriedade aponte para os métodos GETTER e SETTER de uma superclasse. Na prática, evita Warnings do compilador. Para saber mais, leia este artigo;
- Em geral, as configurações do @dynamic são idênticas ao @synthesize.
Neste post fico por aqui. Até a próxima!
Nenhum comentário:
Postar um comentário
Obrigado por deixar a sua participação!