在id类型的对象上调用方法

时间:2011-07-29 17:25:15

标签: objective-c

当我尝试在id类型的对象上调用方法时,我收到警告(找不到方法)。当然不是,但这不是id对象的意义吗?

有没有办法告诉编译器:
“你现在不是我称之为这种方法的对象的类,但不要担心,我确定它确实实现了它!”

3 个答案:

答案 0 :(得分:8)

您可以使用performSelector

如果您有一个对象类型id,那么使用respondsToSelector也是个好主意:)

即。

if ([myObject respondsToSelector:@selector(dosomething:)])
    myObject performSelector:@selector(doSomething:) withObject:@"hello"];

答案 1 :(得分:4)

是的,只需使用正确类类型的变量即可。您可以在发送消息时执行显式强制转换,也可以将其分配给正确类型的变量。在Objective-C中,类型id可以隐式地转换为任何Objective-C对象指针类型:

id myId = ...;

// Option 1: Use a cast when sending the message
[(MyClass *)myId someClassMethod];

// Option 2: Assign to a variable
MyClass *myObj = miId;  // Implicit cast in the assignment
[myObj someClassMethod];

答案 2 :(得分:1)

您可以将id对象投射到您知道它的类。

如果您有一个名为id的{​​{1}}个实例,并且您知道它是instanceA,则会相应地将其投射

ClassA

然后调用方法

Class A *instanceACasted = (ClassA *)instanceA;