【问题标题】:Are curly braces required in @interface declarations in Objective-c?Objective-c 中的@interface 声明中是否需要大括号?
【发布时间】:2011-11-11 16:56:33
【问题描述】:

以下代码编译:

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

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

【问题讨论】:

  • 在移除{s 的情况下构建时是否出现错误?
  • 没有编译器错误。没有大括号看起来很奇怪。
  • 不,这段代码可以正常编译。但是等等,你说过那个!
  • 我知道 :-) 我只是好奇,因为它看起来很奇怪。

标签: objective-c interface curly-braces


【解决方案1】:

不,{ } 部分不是必需的;没有它,您的代码将编译得很好。这是您声明实例变量的区域,如果您不这样做,您可以将其排除在外。你甚至不需要为你的属性声明 ivars——编译器足够聪明,可以将它们添加到需要的地方。

【讨论】:

  • 取决于您的编译器警告标志。您可能还会收到错误消息,指出类结构没有成员。
  • @Mac 哪个警告标志? clang 2.1 和 gcc 4.2.1 都没有使用-Wall -Wextra 发出警告
  • @Bavarious 如果我省略大括号,我会在 Xcode 4.1 中使用默认设置收到警告。
  • @Thu 我不知道,我想知道为什么。事实上,Xcode 4.1 的 NSObject 子类模板在类声明中甚至没有大括号。
  • 也许这是一种 C++ 主义,在 Objective-C 中给出任何这样的编译器警告肯定不是默认行为。
【解决方案2】:

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

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

例子:

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

【讨论】:

  • 这是一条重要信息!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-25
  • 1970-01-01
  • 1970-01-01
  • 2014-06-01
  • 2019-08-22
  • 1970-01-01
相关资源
最近更新 更多