我应该使用performSelector:当我也可以正常调用方法吗?

问题描述:

我想通过[self delegate]得到一个对象的方法。我知道它是哪个类,所以我可以导入类并正常调用,但我也可以使用performSelector:,它不需要导入我的类。我不需要传递参数给方法。是的,我的确看过this。在这种情况下哪一个更好?我应该使用performSelector:当我也可以正常调用方法吗?

直接调用方法更具可读性。当您需要更高级的消息传递时,应该保留performSelector:

严格地说,您不需要导入类来向其发送消息,因为消息分派是动态的而不是静态的,尽管您会收到编译时警告,指出对象可能不会响应选择器。

+0

您可以直接导入类并直接发送消息的好处是编译时类型/接口定义检查,并且如outis所述更高效。 performSelector通常用于不可能知道目标类的泛型类,并依赖程序员确保该方法存在。即UITimer,UIButton等。 – gnasher 2010-04-24 13:31:01

+0

还应该提到的是,您可以通过在相关目标上调用' - (BOOL)respondsToSelector:@selector(mySelector)'来检查对特定选择器的响应,以避免运行时崩溃。 – katzenhut 2013-03-12 17:00:51

一般来说,反射操作(如performSelector:)比直接操作效率低。不过,我不得不承认,我对objC不是很熟悉。