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 protocollo NSCopying .

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.





ios