我正在从斯坦福大学的在线课程中学习面向对象的编程,我不了解有关声明的部分。我认为你必须总是在头文件中声明原型然后在实现文件中编写代码,但是教授在头文件中没有声明原型的情况下编写了一个实现方法,怎么样?
另外,如果没有原型的方法是公开的还是私人的,有人可以清除私人和公共之间的区别吗?没有原型的方法不是来自超级类。
答案 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