这是一种替代方法的图示,它使用 objc 类别:
/* File: Header A */
@interface MONViewController : NSViewController
{
unsigned anIvar;
}
@property (nonatomic, readonly) unsigned anIvar;
- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)bundle;
- (void)dealloc;
- (void)viewDidLoad;
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation;
/* (continued) */
@end
/* File: Header A or Header B, depending on how you want to organize it */
@interface MONViewController (EventCallbacks)
- (IBAction)triviaButtonWasPressed:(id)sender;
/* (continued) */
@end
/* File: Imp A */
@implementation MONViewController
- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)bundle { /* ... */ }
- (void)dealloc { /* ... */ }
- (unsigned)anIvar { /* ... */ }
- (void)viewDidLoad { /* ... */ }
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { /* ... */ }
/* (continued) */
@end
/* File: Imp A or Imp B, depending on how you want to organize it */
@implementation MONViewController (EventCallbacks)
- (IBAction)triviaButtonWasPressed:(id)sender { /* ... */ }
/* (continued) */
@end
幸运的是,编译器会在定义类别时验证您是否定义了所有声明,就像在类中执行的那样。有些东西必须在适当的类实现中定义,例如协议。
如果您将其分成大量较小的文件,请小心 - 您的构建时间可能会受到影响。此外,在这种情况下(因为您的子类化)有些不可避免,但在这方面的可伸缩性问题应该提醒您的接口/类试图做太多事情,应该分成更小的组件。祝你好运!