@property @sintesize

O que @property e @property fazem no Xcode? Por favor, forneça uma explicação em termos realmente simples?

Você pediu termos simples:

@property declara uma propriedade no header da sua class

 @property (nonatomic, retain) NSString *myString; 

@synthesize cria seu setter e getter para sua propriedade (methods de access)

Sem sintetizar você tem que escrever seu próprio setter e getter implemention, como getMyString ou setMyString (capitalizar o primeiro caractere de sua propriedade)

Sam: Apenas um conselho: http://www.cocoadevcentral.com/d/learn_objectivec/ é um recurso bastante sólido para aprender sobre o básico, como propriedades.

Boa sorte!

Propriedades e acessadores sintetizados são novos resources em Objective-C 2.0.

Quando você declara um @property você declara algo como uma instância var. Então você @synthesize methods de access (isto é, getter e setter) para aquela propriedade.

Há também accessres @dynamic se você estiver interessado.

Você deve realmente fazer sua lição de casa sobre isso. A Apple tem um ótimo pdf para isso.

Pense em todas as metas-c mágicas como apenas uma “macro mais inteligente”, como uma “instrução mais inteligente #define” @property se você notar que está sempre no arquivo h, @synthesize está sempre no arquivo m. Então, no background @property (whatever) NSString * myString;

torna-se uma declaração de 2 methods e uma variável privada;

 void set_myString:(NSString *) str; (NSString*) get_myString; 

declarações no arquivo de header

para fazê-los fazer algo, sua implementação é adicionada ao arquivo m quando você digita @synthesize myString; que se torna algo como void set_myString: (NSString *) str {myString = str; }

 (NSString *) get_myString { return (myString); } 

Mas é mais inteligente do que isso, se você disser “reter” “forte” ou “fraco”, ele retornará o ponteiro para o myString ou copiará o myString para um novo object

Então, tudo isso é feito automaticamente por um compilador apenas lendo suas declarações. O que é bastante útil e economiza muito tempo

Por padrão, todas as nossas variables ​​são privadas, portanto não podemos acessar a class. se quisermos usar nossa variável de instância fora da class. Quando você declara um @property você declara algo como uma instância var. Então você @synthesize methods de access (isto é, getter e setter) para aquela propriedade.

Há também accessres @dynamic se você estiver interessado.

simplesmente define o nome da variável setter da propriedade em sua própria class. Por exemplo, vamos dizer que eu tenho isso: @property (nonatomic, copy) NSArray* viewControllers;

Bem, se eu quiser acessar o setter _viewController eu não iria definir uma variável sintetizar. mas se eu quiser acessar a variável viewController pelo nome viewController invés de _viewController , eu faria @synthesize viewController; .

Se eu quisesse usá-lo como um nome completamente diferente, eu poderia fazer isso @synthesize viewControllers = viewControlololer; mas isso é apenas setter. Como você perceberá, [self viewControllers] só funciona e não [self viewControlololer];

Então eu não entendo porque todo mundo escreve o setter e getter de uma propriedade. Ele não altera a variável getter … a menos que isso signifique que [self viewController] esteja ciente do viewControlololer (obviamente).

Na verdade, as propriedades são sintetizadas, implícita ou explicitamente. Propriedades são implicitamente sintetizadas. Portanto, não há necessidade de usar sintetizado, a menos que você queira alterar o nome da variável para algo diferente de _property_name.

Existem outros casos de uso, por exemplo, se você não quiser que uma variável de instância faça o backup de sua propriedade.

As propriedades são explicitamente sintetizadas usando a diretiva @synthesized.

(Resposta extraída do guia Big Nerd Ranch)