在标头和实现中声明方法原型

时间:2012-06-20 07:18:45

标签: objective-c ios5 coding-style implementation declaration

我正在从斯坦福大学的在线课程中学习面向对象的编程,我不了解有关声明的部分。我认为你必须总是在头文件中声明原型然后在实现文件中编写代码,但是教授在头文件中没有声明原型的情况下编写了一个实现方法,怎么样?

另外,如果没有原型的方法是公开的还是私人的,有人可以清除私人和公共之间的区别吗?没有原型的方法不是来自超级类。

2 个答案:

答案 0 :(得分:2)

如果您在头文件中编写该方法,则该方法是公共的,并且可供其他类/对象访问。如果你没有在头文件中声明它,那么该方法是一个私有方法,这意味着你可以在你的类内部访问它,但没有其他类可以使用这个方法。

答案 1 :(得分:2)

这是一种非常合法的方法来声明不在类实现本身之外使用的方法。

编译器将在实现文件中找到方法,只要它们位于使用它们的方法之前。然而情况并非总是如此,因为新的LLVM编译器允许以任何顺序声明方法并从给定文件引用。

在实现文件中声明方法有几种不同的样式:

//In the Header File, MyClass.h
@interface MyClass : NSObject
@end

//in the implementation file, MyClass.m
//Method Decls inside a Private Category
@interface MyClass (_Private)
    - (void)doSomething;
@end

//As a class extension (new to LLVM compiler)
@interface MyClass ()
    - (void)doSomething;
@end

@implementation MyClass
//You can also simply implement a method with no formal "forward" declaration
//in this case you must declare the method before you use it, unless you're using the
//latest LLVM Compiler (See the WWDC Session on Modern Objective C)
- (void)doSomething {
}

- (void)foo {
    [self doSomething];
}
@end