我知道"@"符号是用来显示Objective-C关键字的,但我不明白为什么有些关键字需要分号,而有些则不需要。
也就是,据我所见;@interface、@implementation和@end不需要分号
@interface EditorPrintView ()
@property ImageDocument* editorDoc;
@property NSColor* backgroundColor;
@property BOOL paginate;
@property CGFloat scale;
@end
@class ImageController;
@implementation EditorPrintView
...
@end
有人知道这是为什么吗?如果这只是历史的产物,那么我会买它,但我无法创建一个好的搜索查询来找到任何答案。
我们只能推测Objective-C的设计者Brad Cox的动机。(我想我们也可以试着联系他…)
我相信Brad Cox最初实现Objective-C是作为一个预处理器,以一种相当直接的方式将Objective-C转换成普通的C。如果不需要分号,编写预处理器可能会更容易。
例如,请记住,@interface
后面可以跟一个用大括号括起来的声明块,例如
@interface MyObject : NSObject {
int _count;
IBOutlet NSView *_view;
}
...
@end
也许通过不允许在@interface
声明后使用分号来编写处理这个可选块的预处理器更容易。
同样,由于@-声明不是普通C语言的一部分,也许Brad Cox选择将它们更像C预处理器的#-指令一样对待,这些指令(在Objective-C发明的时候)由预处理器处理,不需要(或者通常甚至允许)分号。所以@interface
…@end
就像#if
…#endif
。
现在,以任何一种方式编写编译器(允许或不允许分号)可能都是微不足道的,但现在没有理由改变语言的这一部分。
对于其他不需要分号的指令:有@protocol
声明,还有@optional
、@required
、@public
、@private
、@package
、@protected
。