5

我正在尝试使用objc_setAssociatedObject本文中描述的方法在类别中创建“假”实例变量。

但是,我在 iOS 6.1 中使用 ARC 时收到以下错误:Use of undeclared identifier 'OBJC_ASSOCIATION_RETAIN对于以下代码片段:

- (void)setStyleName:(NSString *)styleName
{
   objc_setAssociatedObject(self, kDHStyleKey, styleName,
   OBJC_ASSOCIATION_RETAIN);
}

iOS 6.1 有什么变化吗?

我错过了什么?

4

2 回答 2

1

看来我没有导入:#import <objc/runtime.h>

于 2013-02-14T16:19:02.507 回答
1

您必须导入#import <objc/runtime.h>才能使用 objc-runtime 提供的关联对象,以便能够伪造类别中的实例变量或属性。

另外我想指出的是,在类别中使用实例变量会给出编译时警告,指出类别中不允许使用 iVar,但如果您使用 @dynamic 类别中的属性,则不会在编译时警告您。相反,当您尝试在类中设置该属性时,它会导致您在运行时崩溃。

于 2015-06-04T09:28:13.223 回答