2013-03-25 11 views
31

scusa Sono uno sviluppatore iOS newbie, recentemente ho sentito brevemente che @synthesize ora è @synthesize in una determinata versione di Xcode e che il compilatore sintetizzerà automaticamente e proprietà e assegnerà _ a variabili private.Objective-C è richiesto @synthesize o facoltativo?

Ho provato questo:

con @synthesize fuori, è possibile accedere a proprietà e campo di utilizzo privato

self.property_name = something; 
_property_name = something; //(used in getter and setters) 

con @synthesize nome_proprietà, è possibile accedere a proprietà e campo di utilizzo privato

self.property_name = something; 
property_name = something; 

La mia domanda è: abbiamo davvero bisogno di @synthesize? o c'è una storia più grande che mi manca?

+1

è facoltativo. –

+1

l'ultima versione del compilatore inserirà '@ synthesize 'per te se la lasci fuori nella maggior parte dei casi. Ho appena scritto delle proprietà qui: http://stackoverflow.com/questions/15493882/need-assistance-regarding-objective-c-properties-concept/15494036#15494036 – nielsbot

+1

Vedere http://stackoverflow.com/questions/11666008/ automatic-synthesized-properties-in-xcode-4-4 – rmaddy

risposta

51

No, non abbiamo bisogno di farlo a partire da Xcode 4.4, che ha aggiunto una funzione chiamata Default Synthesis Of Properties.

In poche parole, genera automaticamente:

@synthesize name = _name; 
+14

Avvertenza: se si annullano tutti i metodi generati automaticamente, questa linea non verrà generata automaticamente (ma è comunque possibile scrivere autonomamente per ottenere la variabile). Inoltre, le proprietà definite nei protocolli non saranno auto-sintetizzate (invece verrà visualizzato un avviso del compilatore). Infine, anche le sottoclassi di 'NSManagedObject' hanno disabilitato questo comportamento perché è in gran parte indesiderato. – borrrden

+3

Questa risposta è * troppo * semplicemente messa. Per i dettagli leggi questo post: [Automatic Property Synthesis With Xcode 4.4] (http://useyourloaf.com/blog/2012/08/01/property-synthesis-with-xcode-4-dot-4.html) –

+2

Altro Avvertenza: se hai dichiarato proprietà in un protocollo, avranno bisogno di sintetizzare. –

-3

A meno che non hai utilizzato è come ho, quindi è ancora necessario che, per quanto posso dire:

in .h :

@property int32_t FwdID; 

in .m:

@synthesize FwdID; 
.210

utilizzo all'interno della classe:

FwdID = 0; 

Da quello che posso dire, se si desidera che il default a lavorare per voi, dovrete digitare _FwdID = 0; nel codice, che mi sembra brutto.

Quindi, se siete come me (rompendo tutte le convenzioni di codifica standard che presumo), avrete ancora bisogno di usare sintetizzare.

+0

Dovresti accedere alle proprietà tramite i loro getter e setter '[self setFwdID: 0];', altrimenti usa una variabile di istanza reale e non una proprietà. –

Problemi correlati