我们不能在头文件中声明方法吗?

时间:2012-01-12 17:56:12

标签: objective-c xcode

我正在观看斯坦福大学的iPad和iPhone应用程序开发课程视频。教师在视频中说我们可以控制 - 将UI对象拖到实现文件中以创建动作。但是这样方法不会在头文件中声明。这是否意味着可以在.m文件中实现方法,但不能在.h文件中声明?

3 个答案:

答案 0 :(得分:6)

取决于你如何定义“ok”: - )

Objective-C使用动态方法查找,并不真正强制执行访问(“私有”,“公共”等)说明符。因此,您不需要需要在头文件中声明任何方法。

然而你最终会对编译器起作用,因为它会进行相当数量的类型检查,除非你不说服它,你会因此而失败。

答案 1 :(得分:5)

您不需要在头文件中声明实现中的所有方法。但是如果不在头文件中,你显然无法通过文字名称在另一个文件中引用它们,也不能在实现文件中“转发”它们。

(请注意,这与常规C没有什么不同,但与C ++中的类方法不同。)

答案 2 :(得分:5)

在某些情况下,不在头部中声明方法是“OK”。例如,如果使用ARC,则编译器通常需要知道方法签名,以便它可以做正确的事情。但基本上所有这意味着无论你在哪里使用该方法,它都必须已经知道你正在调用的方法。

由于您正在讨论Interface Builder,因为它可以“查看”您的标头和实现文件的整个上下文并知道存在一个方法,因此它会略有不同。即在我上面的术语中,该方法在使用之前已经定义。

关于在使用前的定义,普遍接受的方法是:

  1. 在接口文件(.h)中定义方法。 e.g:

    MyClass.h

    @interface MyClass : NSObject
    - (void)someMethod;
    @end
    

    MyClass.m

    @implementation MyClass
    - (void)someMethod {
        // do something
    }
    @end
    
  2. 在类继续类别中定义方法。 e.g:

    MyClass.h

    @interface MyClass : NSObject
    @end
    

    MyClass.m

    @interface MyClass ()
    - (void)someMethod;
    @end
    
    @implementation MyClass
    - (void)someMethod {
        // do something
    }
    @end