Qual è la differenza tra @property e @synthesize?
-
03-07-2019 - |
Domanda
Come ho capito, @synthesize sta effettivamente generando Getters e Setter. Ma cosa fa allora @property? Sta solo impostando i parametri per quella fantastica funzione magica @synthesize?
Soluzione
Scrivi @property nel file di intestazione
@property float value;
è equivalente a:
- (float)value;
- (void)setValue:(float)newValue;
Ottiene informazioni per ALTRE classi, che la tua classe ha questi metodi
@synthesize phisicaly CREATE questi metodi nell'implementazione della classe
Altri suggerimenti
@property
dichiara il nome come proprietà. Ciò significa che sarà accessibile tramite la sintassi del punto ( object.value
).
@synthetize
può essere visto come una macro, che crea i metodi getter e setter. È utile sapere che è possibile ignorare tali metodi, anche se si digita il @synthetize
in atto.
@property
dichiara getter e / o setter
@synthesize
li implementa.
Esiste un malinteso comune secondo cui la direttiva @synthesize è necessaria per implementare setter e getter creati con la direttiva @property, ma non è così. L'uso della direttiva @property senza @synthesize genererà comunque setter / getter e consentirà di utilizzare la notazione a punti. Tuttavia, tralasciando la direttiva @synthesize, il compilatore genererà le variabili di istanza corrispondenti con un carattere di sottolineatura iniziale, ad es. la proprietà myVar avrà una variabile di istanza di _myVar.
L'uso di un carattere di sottolineatura iniziale è una convenzione comune che consente di distinguere tra proprietà e variabili di istanza. È anche comune che le proprietà e le variabili di istanza condividano lo stesso nome, che è ciò che fa @synthesize per impostazione predefinita.