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

Maggiori dettagli qui:

NSHipster

@kostiakoval

kingscocoa

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";



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow