可以在Objective-C扩展中定义IVAR吗?

可以在Objective-C扩展中定义IVAR吗?,objective-c,cocoa,cocoa-touch,Objective C,Cocoa,Cocoa Touch,我想知道是否可以在.m文件中写入类似的内容: @interface MyController () {//ERROR here Foo *privateFoo; } @end 我做到了,但我得到: 预期标识符或“{”在“{”令牌之前,我想我听到/观看了一段视频(WWDC2010)说这是可能的或将是可能的,目前只有一些架构支持它…但我不太确定,我记不起视频名称 我希望我能在这里得到一些建议 Ignacio。不可能以这种方式处理。类别仅定义其他行为,而不是状态。您可以在现代运行时(64位

我想知道是否可以在.m文件中写入类似的内容:

@interface MyController () {//ERROR here
    Foo *privateFoo; 
}
@end
我做到了,但我得到:
预期标识符或“{”在“{”令牌之前
,我想我听到/观看了一段视频(WWDC2010)说这是可能的或将是可能的,目前只有一些架构支持它…但我不太确定,我记不起视频名称

我希望我能在这里得到一些建议


Ignacio。

不可能以这种方式处理。类别仅定义其他行为,而不是状态。

您可以在现代运行时(64位/iOS)中使用Xcode 3.2.3或3.2.4中的clang(“LLVM编译器1.5”)通过将
-Xclang-fobjc-nonfragile-abi2
添加到其他C标志生成设置中来实现这一点。(请注意,这实际上是一个选项,而不是两个。)


此标志的另一个效果是导致默认情况下合成属性。

尽管没有明确说明,而且线程非常旧,但本文档第75页有一个示例,其中在扩展中添加了ivar


这不是一个类别,它是一个类扩展。规则完全不同。我知道它们在语义上略有不同,如这里所述:……但是,没有任何地方说可以向扩展添加实例变量。请指向那里描述该行为的资源,我将继续并删除我的回答。如果您要使用llvm 2.0编译器的最新版本,那么,是的,您可以在类扩展中定义实例变量。根据您在尝试时遇到编译器错误的事实判断,我认为答案是“否”。虽然正如bbum所说,这将在未来发生变化,尽管我猜测它将被限制在64位运行时。上面提到的旧线程已被苹果删除。我认为这一背景信息的新来源可能是。