在封装OC类的时候,类可能包含成员函数,按照以前的说明,类的成员函数需要需要在头文件中声明,然后在源文件中编写函数的实现。然后我在看别人写的源代码的时候发现,有些函数是没有在类的头文件中声明,然后直接就在类的源文件定义并调用。这又是为什么呢,为什么有些在头文件中声明,有些在头文件中没有声明呢?
这点情况跟类的成员变量有点类似,有些函数我们在头文件中声明,我们就可以将这些函数理解为该类的公共函数(public类型),对于那些没有在头文件中声明,却在类的实现文件中定义的函数,我们可以将这些成员函数看成(理解)是类是的私有(private)类型的成员函数。 对于Public类型的函数,我们可以通过类的实例直接调用,对于Private类型的函数,我们就不能通过类的实例来调用,这些类型的函数我们就供其他函数的调用。通过这样的假设,我们可以很好的理解 本文开头提出问题。
可是,实际上,不管oc中的成员函数是否在头文件中声明,通过类的实例都可以调用这些成员函数,但是调用这两种函数还是稍微有些区别的,当调用没有声明过的成员函数的时候,在编译程序的时候,编译器会给出一个提示,提醒用户当前的函数可能不会有响应,如果继续执行函数,可能会发现,App是可以运行的,并且可能会生成正确的结果。如果从这里看来,似乎函数在头文件是否声明都问题不大,可是,可是,可是,我强烈的建议,我们在编写Objective-c函数类的时候,我们严格按照根据实际需求来编写函数,在设计函数的时候,如果不是提供给外部的接口,我们就尽量(强烈建议)不要在头文件中声明,仅仅作为内部的成员函数来调用,如果成员函数需要作为接口提供给外部的开发人员,我们就需要将该函数在头文件中声明,并且对于这类函数,我们尽量不要在内部调用,仅仅作为外部接口调用。
THE END !
2011-07-05 执笔与BeiJing