这个Objective-C语法的含义是什么?

时间:2011-08-12 16:18:14

标签: objective-c

请有人澄清这两个片段的区别是什么?

我知道这是实例化:

Class *myClass = [[Class alloc] init] ....etc

但究竟是什么?

(Class *)myClass .....etc

由于

3 个答案:

答案 0 :(得分:2)

第二个片段是方法的强制转换或参数。没有与实例化有任何关系。

如果方法声明中出现(Class *)myClass,它只定义方法的参数应该是什么类型。例如,- (void) method:(Class *)myClass是一个返回void的方法,它接受一个Class*类型的参数。

如果其他代码中出现(Class *)myClass,则为演员。基本上它表示将myClass重新解释为指向类型为Class的对象的指针,而不管其类型是什么。这就像使用数字进行投射一样 - 如果xint(float)x将其转换为float,那么您可以在浮点运算中使用它。

一般来说,我提醒您不要使用Objective-C对象进行大量投射。你会看到这样的事情就是将NS对象转换为CF对象,就像在(CFURLRef)[NSURL fileURLWithPath:path]中一样。但是大多数情况下,不同类型的物体都不能正常投射。

此外,您的第一个代码段中有错误。它实际上是[[Class alloc] init]。您必须致电alloc,然后致电init。并且[init]毫无意义 - 它根本不符合Objective-C的[object method]语法。

答案 1 :(得分:1)

第一个,给出正确的语法实例化,如你所说。

第二个是将变量“myClass”转换为指向Class对象实例的指针。

答案 2 :(得分:0)

第二个片段是C风格的演员表。它有效地告诉编译器将myClass视为Class *类型的值,而不管其声明的类型。如果没有其余的片段(以及myClass的前面声明),就不可能说出为什么要使用强制转换或者它会产生什么效果。