Objective-c中的@interface声明是否需要花括号?

Sun*_*day 13 interface objective-c curly-braces

以下代码编译:

@interface MyClass : ParentClass // missing {
// missing }
@property (nonatomic, copy) NSString *myString;
@end
Run Code Online (Sandbox Code Playgroud)

我想知道@interface声明中的花括号是否真的是必要的.

Noa*_*oon 21

不,该{ }部分没有必要; 没有它你的代码将编译正常.它是您声明实例变量的区域,如果您不这样做,您可以自由地将其保留.您实际上甚至不需要为您的属性声明ivars - 编译器足够聪明,可以在需要的地方添加它们.

  • 取决于您的编译器警告标志.您可能还会收到错误,指出类结构没有成员. (2认同)
  • @Thu我没有,我想知道为什么.事实上,Xcode 4.1的'NSObject`子类的模板甚至在类声明中都没有括号. (2认同)

rob*_*ryf 9

编译器足够聪明,可以将@property delarations添加到类中.

这些括号的唯一用途是当您想要将变量设为私有,受保护或特定公开时.

例:

@interface Example: NSObject {
@public
    int publicVar;
@private
    int privateVar;
    int privateVar2;
@protected
    int protectedVar;
}
@end
Run Code Online (Sandbox Code Playgroud)