我们知道使用类别我们可以向现有类添加函数。但我怀疑,是否有可能在目标C ??
中将对象或数据成员添加到类别中答案 0 :(得分:10)
您可以使用Objective-C相关参考。您可以在此处阅读有关它们的Apple文档:Associative References
基本上,这允许您使用objc_setAssociatedObject函数将对象附加到任何实例,如下所示:
#import <objc/runtime.h>
/* The key for the associated object must be void* so you can use a static variable to get a
unique pointer. Alternatively you can use _cmd since selectors are constant and unique. */
static char key;
objc_setAssociatedObject(theInstanceToAddYourObjectTo,
&key,
@"The object you want to add",
OBJC_ASSOCIATION_RETAIN);
再次获取关联对象:
id value = objc_getAssociatedObject(theInstanceToAddYourObjectTo, &key);
要清除关联的对象,请将nil作为值传递:
objc_setAssociatedObject(theInstanceToAddYourObjectTo,
&key,
nil,
OBJC_ASSOCIATION_ASSIGN);
因此,使用这些函数,您可以添加自己的实例变量,以便在类别方法等中使用。
答案 1 :(得分:0)
您是对的,您无法通过类别添加实例变量/成员/属性。您只能使用您正在扩展的类已经提供的内容,但当然您的新方法可能会在被调用时收到参数。
答案 2 :(得分:0)
问题是关联对象无法从方法
访问它 - (void)encodeWithCoder:(NSCoder *)aCoder