我正在观看斯坦福大学的iPad和iPhone应用程序开发课程视频。教师在视频中说我们可以控制 - 将UI对象拖到实现文件中以创建动作。但是这样方法不会在头文件中声明。这是否意味着可以在.m文件中实现方法,但不能在.h文件中声明?
答案 0 :(得分:6)
取决于你如何定义“ok”: - )
Objective-C使用动态方法查找,并不真正强制执行访问(“私有”,“公共”等)说明符。因此,您不需要需要在头文件中声明任何方法。
然而你最终会对编译器起作用,因为它会进行相当数量的类型检查,除非你不说服它,你会因此而失败。
答案 1 :(得分:5)
您不需要在头文件中声明实现中的所有方法。但是如果不在头文件中,你显然无法通过文字名称在另一个文件中引用它们,也不能在实现文件中“转发”它们。
(请注意,这与常规C没有什么不同,但与C ++中的类方法不同。)
答案 2 :(得分:5)
在某些情况下,不在头部中声明方法是“OK”。例如,如果使用ARC,则编译器通常需要知道方法签名,以便它可以做正确的事情。但基本上所有这意味着无论你在哪里使用该方法,它都必须已经知道你正在调用的方法。
由于您正在讨论Interface Builder,因为它可以“查看”您的标头和实现文件的整个上下文并知道存在一个方法,因此它会略有不同。即在我上面的术语中,该方法在使用之前已经定义。
关于在使用前的定义,普遍接受的方法是:
在接口文件(.h)中定义方法。 e.g:
MyClass.h
@interface MyClass : NSObject
- (void)someMethod;
@end
MyClass.m
@implementation MyClass
- (void)someMethod {
// do something
}
@end
在类继续类别中定义方法。 e.g:
MyClass.h
@interface MyClass : NSObject
@end
MyClass.m
@interface MyClass ()
- (void)someMethod;
@end
@implementation MyClass
- (void)someMethod {
// do something
}
@end