Objective-C: rendendo Ivars @public o @synthesing @properties per loro?Quando dovrei usare le proprietà?
-
13-11-2019 - |
Domanda
Ho alcune variabili di istanza nella mia classe che vorrei essere accessibile ovunque.Come così:
@interface SomeObject : NSObject
{
@public
NSString *someString;
}
@end
@implementation SomeObject
@end
.
Posso accedere alla proprietà dall'istanza utilizzando la sintassi ->
come di seguito, come farei in C ++:
someObjectInstance->someString
.
Dovrei fare una proprietà per someString
quando tutto ciò che voglio è che sia accessibile dal mondo esterno?Creerei un @property
per someString
nella mia interfaccia e @synthesize
nella mia implementazione, che mi consentirebbe di accedervi utilizzando la sintassi DOT.
Soluzione
In generale, se si desidera esporre i dati, è necessario utilizzare le proprietà.Effettuare le variabili di istanza Il pubblico è una cattiva idea in generale.
Altri suggerimenti
È il modo più orientato agli oggetti per farlo perché quando si utilizza una proprietà è possibile modificare il getter / Setter in seguito (invece di averlo sintetizzato) se lo volessi fare qualcos'altro.
Sì, perché ciò che stai facendo quando la rendi un @property
sta dirigendo la gente che lo utilizza per chiamare i metodi generacodicitagCode e setSomeString
, in effetti.Anche se sei generatoDicetagCodegnandoli, è meglio che la qualità del tuo codice utilizzi i metodi, perché potrebbe cambiarli se è necessario.Se stai solo usando il riferimento del puntatore, se ti ritrovi a dover bisogno di intercettare gli accessi, non sarai in grado di farlo.