Buscar..


Introducción

Presentado por primera vez en iOS 3.1 como parte del tiempo de ejecución de Objective-C, los objetos asociados proporcionan una manera de agregar variables de instancia a un objeto de clase existente (sin subclasificación.

Esto significa que podrá adjuntar cualquier objeto a cualquier otro objeto sin crear subclases.

Sintaxis

  • void objc_setAssociatedObject (objeto id, void * key, id valor, objc_AssociationPolicy policy)

  • id objc_getAssociatedObject (id objeto, void * key)

  • void objc_removeAssociatedObjects (id object)

Parámetros

Param Detalles
objeto El objeto existente que desea modificar.
llave Básicamente, este puede ser cualquier puntero que tenga una dirección de memoria constante, pero una buena práctica es usar aquí una propiedad computada (getter)
valor El objeto que quieres agregar.
política La política de memoria para este nuevo value es decir, debe conservarse / asignarse, copiarse, etc. como cualquier otra propiedad que declararía.

Observaciones

Más detalles aquí:

NSHipster

@kostiakoval

Kingscocoa

Ejemplo de objeto asociado básico

Supongamos que necesitamos agregar un objeto SomeClass a SomeClass (no podemos SomeClass subclase).

En este ejemplo, no solo creamos un objeto asociado, sino que también lo envolvemos en una propiedad computada en una categoría para una mayor limpieza.

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

Ahora sería tan fácil como esto utilizar la propiedad.

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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow