id类型的对象可以调用任何方法吗?

id类型的对象可以调用任何方法吗?这个问题问出来的时候,就是个坑。

你首先应该问他你说的这个是在MRC下还是在ARC下运行,环境不一样,效果也不一样。

ARC下不可以:因为会做编译检查的,检查过不了当然不能运行,何谈调用。如果你确实想调用可以使用下边这个方法进行调用。

- (id)performSelector:(SEL)aSelector withObject:(id)object;

MRC下可以:

MRC下,任何对象都可以调用任何方法,只不过会给你警告而已。

注释:

如果不进行编译检查的话,按照runtime的特性是都可以进行调用的。只不过是,最后调用会失败,因为对象并没有这个方法。

你可能感兴趣的:(id类型的对象可以调用任何方法吗?)