最近我一直在想为什么人们有时会把方法放在代码的.h和接口区域。我只是问,因为我知道这不是必要的。
例如:
.h
@interface ViewController : UIViewController
- (IBAction) methodOne:(id)sender;
- (BOOL) doesChickenTasteGood;
还有:
.m
import "ViewController.h"
@interface ViewController ()
- (IBAction) methodOne:(id)sender;
- (BOOL) doesChickenTasteGood;
@end
@implementation ViewController
- (IBAction) methodOne:(id)sender {
NSLog(@"Yay you poked me");
}
- (BOOL) doesChickenTasteGood {
return YES;
}
@end
我只是想知道我是否应该将这些方法放在这些方面。
编辑:我不是在问为什么有人会在.h和代码的接口部分重新声明这些方法。我只是想问为什么有人会把方法放在.m文件的实现之外。
答案 0 :(得分:4)
如果您希望其他类可见,您可以在标头中声明一个方法。仅在实现文件中声明的方法在编译时对其他类是不可见的,因此实际上是 private (由于Objective-C的动态调度机制,它们仍然可以被调用,但是你会得到一个至少警告。)
方法放在实现文件的@interface
块中,作为在使用之前声明它们存在的方式。这允许更有组织的代码(例如,仅包含图形方法的@interface
块,或仅包含数学方法的代码),同时保持来自呼叫者的隐私。
如果标题中没有方法,那么调用代码将不知道如何处理类的实例。
答案 1 :(得分:3)
.h文件构成了您班级的公共方法。如果您希望其他人能够调用您的doesChickenTasteGood
方法,则需要在.h中声明它,因为这是其他类#import
。