objective-c - tutorial - objective c vs swift
La copia di @property in combinazione con readonly ha senso? (3)
Se ho capito bene, la copy
impone al setter di creare una copia dell'oggetto passato. Tuttavia, se lo uso insieme a readonly
, non ci sarà un setter. Quindi la mia ipotesi è corretta, che la combinazione di @property (copy, readonly)
non ha senso o mi sfugge qualcosa?
Ha senso. Ad esempio, se desideri accedere al setter di una proprietà solo nella tua implementazione:
@interface MyClass : NSObject
@property (nonatomic, copy, readonly) NSData *data;
- (id)initWithData:(NSData *)data;
@end
e nella continuazione della classe nel file .m
:
@interface MyClass ()
@property (nonatomic, copy, readwrite) NSData *data;
@end
Si noti che in questo caso è necessaria la dichiarazione di copy, readonly
nell'intestazione pubblica!
Hai ragione, non ha senso avere entrambi.
Secondo la documentazione di Apple (che ho linkato qui per te):
copy
Specifica che una copia dell'oggetto deve essere utilizzata per l'assegnazione.Il valore precedente viene inviato un messaggio di
release
.La copia viene effettuata richiamando il metodo di
copy
. Questo attributo è valido solo per i tipi di oggetto, che devono implementare il protocolloNSCopying
.
Quindi sì, hai ragione ... crea solo un metodo getter e la copy
verrebbe effettivamente ignorata, dato che non esiste un metodo setter che faccia assegnamento.