获取类实例属性通过id变量分配它

时间:2015-02-03 12:25:55

标签: objective-c

我正在研究Objective-C。如果我理解正确,请使用以下代码:

id data;
myClass = [[NSObject alloc]init];
data = myClass;

myClass个实例分配给data,因此,我可以使用data,就像我可以使用myClass一样。

以下代码正常运行:

data = myClass;
[data methodBelongToMyClass];

但是我无法访问该类的属性。请看一下(分子是myClass的属性):

myClass.numerator = numerator * dataValue.denominator;

由于错误导致它崩溃(实际上甚至没有运行) - Property denominator not found on object of type '__strond id'

是的,我理解它有点不言自明,但是,我已经将类实例分配给了我的id对象,为什么我无法访问属性?

感谢任何帮助和解释,谢谢!

2 个答案:

答案 0 :(得分:1)

这是因为dataid类型而不是NSObject。 编译器不知道id data中的数据类型,因此无法引用它。

如果你创建一个铸件,即

id data = MyCalss;
NSObject *object = (NSObject *)data;

您可以访问班级中的内部数据。

答案 1 :(得分:1)

我对你的问题感到有些困惑,但我会尽力回答。

因为ID被认为是"任何"它不知道属性,除非你将它转换为你设置它的对象类型。但是你可以这样做。

[data valueForKey@"propertyName"]

使用id可能非常强大,但在尝试调试时也会被滥用并给你带来很多麻烦。

希望有所帮助。