por pierrefreire » 17 Mai 2011 22:13
Alex,
Como os colegas disseram, muito dificil explicar em um post, tem que dar uma olhada na documentação mesmo.
Mas para tentar pelo menos ilustrar rapidamente:
@property: Diz ao compilador que isto é uma propriedade e ajudará na criação automatica dos métodos getter e setter( se a propriedade não for apenas de leitura).
nonatomic e retain: São atributos da propriedade, isto muda de acordo, se for um objeto ou um tipo primitivo e tem outros atributos ainda como copy, readwrite, assign...
Mas entenda o property e depois conhecer os atributos ficará mais simples.
Só a titulo de exemplo, partindo do principio de Orientação a objetos, a CLASSE é formada de de atributos e métodos.
E geralmente os atributos devem ter os métodos acessores: ou seja os getters e setters.
A classe de exemplo tem apenas um atributo chamado Nome.
No exemplo 1, eu usei property no arquivo de cabeçalho .h e no .m eu usei apenas o @synthesize e o os métodos getter
e setter serão criado automaticamente.
No exemplo 2, eu não usei property no arquivo de cabeçalho e tive que declarar os métodos getter/setter e no .m
eu tive que codificar eles.
Imagina se minha classe tivesse vários atributos o que é normal e tivesse que escrever todos os getters e setters?
nome, populacao, cidade, uf.
Tem outros detalhes, mas espero que seja uma luz. Abaixo tem os exemplos eu nem cheguei a compilar no Xcode, mas
é por ai mesmo. Espero ter ajudado.
Exemplo 1. Um classe cidade usando propertyes
-------------- Arquivo cabecalho - Cidades.h -----------------------
#import <Foundation/Foundation.h>
@interface Cidade : NSObject {
NSString *nome;
}
@property (nonatomic, retain) NSString *nome;
@end
-----------------------------------------------------------------------------
-------------- Arquivo implementação ( Com uso do @property ) - Cidades.h -----------------------
#import "Cidade.h"
@implementation Cidade
// O synthesize abaixo cria automaticamentos os métodos getter e setter de nome, que serão chamados
// nome(getter) e setNome(setter)
@synthesize nome;
@end
***************************************************************************************
EXEMPLO 2. Um classe cidade sem usar propertyes
-------------- Arquivo cabecalho - Cidades.h -----------------------
#import <Foundation/Foundation.h>
@interface Cidade : NSObject {
NSString *nome;
}
-(NSString *) nome;
-(void) setNome: (NSString *) novoNome;
@end
-----------------------------------------------------------------------------
-------------- Arquivo implementação ( sem uso do @property ) - Cidades.h -----------------------
#import "Cidade.h"
@implementation Cidade
// Metodo getter implementado, já que não tem @propertyes
-(NSString *) nome {
return nome;
}
// Metodo setter implementado já que não tem @propertyes
-(void) setNome: (NSString *) novoNome {
if ( novoNome != nome ) {
[nome release]
nome = [novoNome retain];
}
}
@end