在Objective-C中,@interface声明中需要花括号吗?

14
以下代码可以编译:
@interface MyClass : ParentClass // missing {
// missing }
@property (nonatomic, copy) NSString *myString;
@end
我想知道 @interface 声明中的花括号是否真的是必需的。

6
当你移除了{后构建,是否出现了错误?请确认。 - PengOne
没有编译器错误。只是没有花括号感觉有点奇怪。 - SundayMonday
不,这段代码会编译成功。但是等等,你说的 - sidyll
我知道 :-) 我只是好奇,因为它看起来有点奇怪。 - SundayMonday
2个回答

22

不,{ } 部分并非必需的;你的代码即使没有这部分也可以编译通过。它是用来声明实例变量的区域,如果你不需要声明实例变量,那么此部分可以省略。甚至你也不需要为属性声明实例变量——编译器足够聪明,会在需要时自动添加。


2
取决于您编译器的警告标志。您还可能会收到一个错误,指出类结构体没有成员。 - Macmade
@Mac 是哪个警告标志?无论是clang 2.1还是gcc 4.2.1,都不会在使用“-Wall -Wextra”时发出警告。 - user557219
@Bavarious 如果我省略大括号,在默认设置下,Xcode 4.1 会发出警告。 - Beltalowda
2
@Thu 我不知道为什么。事实上,Xcode 4.1 的一个继承自 NSObject 的子类模板在类声明中甚至没有大括号。 - user557219
也许这是 C++ 的一种特性,但在 Objective-C 中并没有默认提供此类编译器警告。 - bbum

9

编译器足够聪明,会将您的@property声明添加到类中。

这些括号唯一的用途是当您想要将变量设置为私有、受保护或特定公共时使用。

示例:

@interface Example: NSObject {
@public
    int publicVar;
@private
    int privateVar;
    int privateVar2;
@protected
    int protectedVar;
}
@end

1
这是一条重要的信息! - Collin White

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接