Sök…


Introduktion

Första introducerades i iOS 3.1 som en del av Objekt-C-runtime, tillhörande objekt ger ett sätt att lägga till instansvariabler till ett befintligt klassobjekt (w \ o subclassing).

Detta innebär att du kan knyta ett objekt till något annat objekt utan att underklassera.

Syntax

  • void objc_setAssociatedObject (id-objekt, void * -nyckel, id-värde, objc_AssociationPolicy-policy)

  • id objc_getAssociatedObject (id-objekt, void * -tangent)

  • void objc_removeAssociatedObjects (id-objekt)

parametrar

Param detaljer
objekt Det befintliga objektet du vill ändra
nyckel Detta kan i princip vara vilken som helst pekare som har en konstant minnesadress, men en trevlig praxis är att använda en datoregenskap här (getter)
värde Objektet du vill lägga till
politik Minnespolicyn för det här nya value dvs skulle det behållas / tilldelas, kopieras osv. Precis som alla andra egenskaper du skulle förklara

Anmärkningar

Mer information här:

NSHipster

@kostiakoval

kingscocoa

Grundläggande associerat objektexempel

Antag att vi måste lägga till ett NSString-objekt till SomeClass (vi kan inte underklass).

I det här exemplet skapar vi inte bara ett tillhörande objekt utan också lindar det i en datoregenskap i en kategori för extra snygghet

#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));
}

Nu skulle det vara lika enkelt som detta att använda fastigheten

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow