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

use*_*115 7 xcode objective-c

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

CRD*_*CRD 6

取决于你如何定义"确定":-)

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

然而,你最终会对编译器进行打击,因为它会进行大量的类型检查,除非你说服它不要,并且你会因此而失败.


Hot*_*cks 5

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

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


mat*_*way 5

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

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

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

  1. 在接口文件(.h)中定义方法.例如:

    MyClass.h

    @interface MyClass : NSObject
    - (void)someMethod;
    @end
    
    Run Code Online (Sandbox Code Playgroud)

    MyClass.m

    @implementation MyClass
    - (void)someMethod {
        // do something
    }
    @end
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在类继续类别中定义方法.例如:

    MyClass.h

    @interface MyClass : NSObject
    @end
    
    Run Code Online (Sandbox Code Playgroud)

    MyClass.m

    @interface MyClass ()
    - (void)someMethod;
    @end
    
    @implementation MyClass
    - (void)someMethod {
        // do something
    }
    @end
    
    Run Code Online (Sandbox Code Playgroud)