Objective C / iOS中的Ruby method_missing的等价物

据我所知目标C / iOS是非常dynamic的语言,它是如同Ruby一样dynamic? 它有相当于method_missing吗? 我问过同样的问题,JS 是否有像Ruby的method_missingfunction? 并感到失望,js不支持它呢。

Objective-C是dynamic的,虽然是Ruby程序员,但我认为它不像Ruby那样dynamic。

Objective-C具有与method_missing等效的function。 您需要重写forwardInvocation:methodSignatureForSelector:并遵循Apple提供的重要build议:

重要要响应您的对象本身不识别的方法,除了forwardInvocation:之外,您必须重写methodSignatureForSelector :. 转发消息的机制使用从methodSignatureForSelector获得的信息:创build要转发的NSInvocation对象。 您的重写方法必须为给定的select器提供适当的方法签名,可以通过预先编写一个方法或通过向另一个对象请求一个方法。

不要使用doesNotRecognizeSelector:正如苹果警告, it must always result in an exception being thrown.

有关更多详细信息,请参阅NSObject类文档: http : //developer.apple.com/library/ios/#DOCUMENTATION/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html

我已经实现了这个模式的基础上添加相同的方法到UITextFieldUITextView子类的示例: https : //stackoverflow.com/a/19661059/171933

请享用!

我想method_missing是一个callback方法,当一个对象缺less某个方法时被调用。 那么,你可以使用respondsToSelector方法来检查一个对象是否可以响应一个方法。 这是一个在NSObject协议中声明的方法。 因此,在意识到缺less一些方法后,可以不调用method_missing,而是在检查之前检查它。

  if ([myObject respondsToSelector:@selector(someMethodThatMightBeMissing:)]) NSLog(@"The method is missing");