Per quanto ho capito @property dichiara getter e setter nel file .h e @synthesize implementa getter e setter nei file .m. Inoltre è possibile scrivere la propria implementazione per getter e setter invece di usare @synthesize.Objective-C: dichiarazione @property senza implementazione (@synthesize)
Quindi, se abbiamo sempre bisogno di implementare il setter/getter, perché dobbiamo dichiararlo addizionale? @property sembra essere semanticalmente ridondante per me e una fonte di bug.
Cosa succede quando dichiaro una @property ma dimentico di implementarla con @synthesize o manualmente? Che cosa succede quando uso @synthesize e dimentico la dichiarazione @property?
bello che hanno aggiunto questo. Grazie per la risposta –
C'è ancora un caso in cui sarà necessario utilizzare entrambe le proprietà e sintetizzare insieme. Il compilatore utilizzerà il nome della proprietà più il prefisso underscore per creare l'ivar. Se il _propertyname di ivar si scontra con una variabile di istanza privata, sarà necessario sintetizzarlo su un nuovo ivar. Ad esempio: se si sottoclasse la UIToolbar e si dichiara che una proprietà la nomina come delegata, si otterrà un errore nel tentativo di utilizzare ivar _delegate perché la UIToolbar contiene una variabile di istanza privata id _delegate. Puoi risolvere questo problema usando '@synthesize delegate = _mydelegate;'. – lolol