iOS
Objective-C Oggetti associati
Ricerca…
introduzione
Introdotto per la prima volta in iOS 3.1 come parte del runtime Objective-C, gli oggetti associati forniscono un modo per aggiungere variabili di istanza a un oggetto di classe esistente (senza sottoclasse.
Ciò significa che potrai allegare qualsiasi oggetto a qualsiasi altro oggetto senza sottoclassi.
Sintassi
void objc_setAssociatedObject (id id, void * key, id valore, objc_AssociationPolicy policy)
id objc_getAssociatedObject (oggetto id, void * key)
void objc_removeAssociatedObjects (oggetto id)
Parametri
Param | Dettagli |
---|---|
oggetto | L'oggetto esistente che si desidera modificare |
chiave | Questo può essere praticamente qualsiasi puntatore che ha un indirizzo di memoria costante, ma una buona pratica è usare qui una proprietà calcolata (getter) |
valore | L'oggetto che vuoi aggiungere |
politica | La politica di memoria per questo nuovo value vale a dire dovrebbe essere mantenuta / assegnata, copiata ecc. Proprio come qualsiasi altra proprietà dichiarata |
Osservazioni
Esempio di oggetto associato di base
Supponiamo di dover aggiungere un oggetto NSString a SomeClass
(non possiamo SomeClass
sottoclassi).
In questo esempio non creiamo solo un oggetto associato, ma lo racchiudiamo anche in una proprietà calcolata in una categoria per maggiore pulizia
#import <objc/runtime.h>
@interface SomeClass (MyCategory)
// This is the property wrapping the associated object. below we implement the setter and getter which actually utilize the object association
@property (nonatomic, retain) NSString *associated;
@end
@implementation SomeClass (MyCategory)
- (void)setAssociated:(NSString *)object {
objc_setAssociatedObject(self, @selector(associated), object,
OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (NSString *)associated {
return objc_getAssociatedObject(self, @selector(associated));
}
Ora sarebbe facile come usare la proprietà
SomeClass *instance = [SomeClass alloc] init];
instance.associated = @"this property is an associated object under the hood";