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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top