Eiko e outros deram respostas corretas.
Esta é uma maneira mais simples: Acesse diretamente a variável de membro privado.
Exemplo
No arquivo .h do cabeçalho:
@property (strong, nonatomic, readonly) NSString* foo;
No arquivo .m de implementação:
// inside one of my init methods
self->_foo = @"someString"; // Notice the underscore prefix of var name.
É isso, é tudo de que você precisa. Sem confusão, sem confusão.
Detalhes
A partir do Xcode 4.4 e do LLVM Compiler 4.0 ( novos recursos no Xcode 4.4 ), você não precisa mexer nas tarefas discutidas nas outras respostas:
- A
synthesize
palavra-chave
- Declarando uma variável
- Declarando novamente a propriedade no arquivo .m de implementação.
Depois de declarar uma propriedade foo
, você pode assumir Xcode acrescentou uma variável de membro particular chamado com um prefixo de sublinhado: _foo
.
Se a propriedade foi declarada readwrite
, o Xcode gera um método getter chamado foo
e um setter chamado setFoo
. Esses métodos são chamados implicitamente quando você usa a notação de ponto (meu Object.myMethod). Se a propriedade foi declarada readonly
, nenhum setter é gerado. Isso significa que a variável de apoio, nomeada com o sublinhado, não é somente leitura. Os readonly
meios simplesmente que nenhum método de ajuste foi sintetizada, e, portanto, usando a notação de pontos para definir um valor de falha com um erro do compilador. A notação de ponto falha porque o compilador o impede de chamar um método (o setter) que não existe.
A maneira mais simples de contornar isso é acessar diretamente a variável de membro, nomeada com o sublinhado. Você pode fazer isso mesmo sem declarar essa variável com nome de sublinhado! O Xcode está inserindo essa declaração como parte do processo de construção / compilação, então seu código compilado realmente terá a declaração da variável. Mas você nunca vê essa declaração em seu arquivo de código-fonte original. Não mágico, apenas açúcar sintático .
Usar self->
é uma forma de acessar uma variável de membro do objeto / instância. Você pode omitir isso e apenas usar o nome var. Mas eu prefiro usar a seta self + porque ela torna meu código autodocumentado. Quando você vê o, self->_foo
você sabe sem ambigüidade que _foo
é uma variável de membro nesta instância.
By the way, discussão de prós e contras de assessores da propriedade versus acesso Ivar direta é exatamente o tipo de tratamento pensativo você vai ler na Dr. Matt Neuberg 's Programming iOS livro. Achei muito útil ler e reler.