请有人澄清这两个片段的区别是什么?
我知道这是实例化:
Class *myClass = [[Class alloc] init] ....etc
但究竟是什么?
(Class *)myClass .....etc
由于
答案 0 :(得分:2)
第二个片段是方法的强制转换或参数。没有与实例化有任何关系。
如果方法声明中出现(Class *)myClass
,它只定义方法的参数应该是什么类型。例如,- (void) method:(Class *)myClass
是一个返回void的方法,它接受一个Class*
类型的参数。
如果其他代码中出现(Class *)myClass
,则为演员。基本上它表示将myClass
重新解释为指向类型为Class
的对象的指针,而不管其类型是什么。这就像使用数字进行投射一样 - 如果x
是int
,(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的前面声明),就不可能说出为什么要使用强制转换或者它会产生什么效果。