如何在 Obj-C 的运行时将结构与对象相关联
How to associate a struct with object in Obj-C's runtime
如何使用objc_setAssociatedObject
关联对象?
OBJC_EXPORT void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)
value
必须是 Objective-C 对象。您需要将结构包装在 Objective-C class 中。您可以为此使用 NSValue。
StructType s = ...;
NSValue* value = [NSValue valueWithBytes:&s objCType:@encode(StructType)];
objc_setAssociatedObject(obj, SPECIAL_KEY, value, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
...
NSValue* value = objc_getAssociatedObject(obj, SPECIAL_KEY);
StructType s;
[value getValue:&s];
如何使用objc_setAssociatedObject
关联对象?
OBJC_EXPORT void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)
value
必须是 Objective-C 对象。您需要将结构包装在 Objective-C class 中。您可以为此使用 NSValue。
StructType s = ...;
NSValue* value = [NSValue valueWithBytes:&s objCType:@encode(StructType)];
objc_setAssociatedObject(obj, SPECIAL_KEY, value, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
...
NSValue* value = objc_getAssociatedObject(obj, SPECIAL_KEY);
StructType s;
[value getValue:&s];