为什么有些人将方法放在.h文件和接口代码中呢?

时间:2013-02-09 15:00:21

标签: objective-c cocoa-touch

最近我一直在想为什么人们有时会把方法放在代码的.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文件的实现之外。

2 个答案:

答案 0 :(得分:4)

如果您希望其他类可见,您可以在标头中声明一个方法。仅在实现文件中声明的方法在编译时对其他类是不可见的,因此实际上是 private (由于Objective-C的动态调度机制,它们仍然可以被调用,但是你会得到一个至少警告。)

方法放在实现文件的@interface块中,作为在使用之前声明它们存在的方式。这允许更有组织的代码(例如,仅包含图形方法的@interface块,或仅包含数学方法的代码),同时保持来自呼叫者的隐私。

如果标题中没有方法,那么调用代码将不知道如何处理类的实例。

答案 1 :(得分:3)

.h文件构成了您班级的公共方法。如果您希望其他人能够调用您的doesChickenTasteGood方法,则需要在.h中声明它,因为这是其他类#import