Objective-C中ad-hoc方法定义背后的基本原理

时间:2011-08-17 19:56:44

标签: objective-c methods definition

我开始用C ++编程。因此,我早就被教导,对于每个定义,应该有一个声明。使用成员函数,这是一项要求。

既然我已经开始学习Objective-C了,我发现你不需要配对它就有点“震惊”。显然,如果您没有定义方法,则不会调用它。如果您没有声明方法,而是定义它,则会调用它。

允许这种类型的临时定义的理由是什么? 由于我对C ++有偏见,我觉得阅读其他人的代码很烦人次,方法没有声明。很难对类的界面进行概述。

我在这里找到了几个答案:Objective c: method relation .h and .m。不幸的是,他们不是很确定。

1 个答案:

答案 0 :(得分:4)

Objective-C和其他语言包括允许您动态定义方法的元编程工具,因此您可以声明特定方法并在运行时定义其他内容,您可以在此问题上看到此功能的典型示例关于how to implement method_missing like functionality on Objective-C

至于另一端,实现但未声明的方法,没有明确的方法来定义Objective-C上的私有方法,并且有时你想要定义只知道的方法你自己的课程而不是其他人。因此,您不要在 .h 文件中声明该方法,但仍然可以在 .m 文件中实现该方法。

编译器通常会抱怨您使用的是未定义的方法,但您可以忽略此方法或将 .m 文件中的这些私有方法声明为特殊类别,它看起来像这样:

@interface YourClass (PrivateMethods)
  - (void) somePrivateMethod;
@end


@implementation YourClass 
  - (void) somePrivateMethod { NSLog(@"Something!"); }
@end

像Proxies这样的常见模式(本地或远程模式)通常依赖于这些元编程工具,它们在Java,Ruby,Python和Objective-C本身等语言中非常常见。