Iphone Objective-C,参考属性

Iphone Objective-C,参考属性,iphone,objective-c,gcc,Iphone,Objective C,Gcc,这可能是iPhone特有的,我不确定。编译器在为模拟器编译时不会抱怨,但在为设备编译时,当我尝试设置对象引用的属性时,它会抛出一些奇怪的错误。例如 @property (nonatomic) CGRect &finalFrame; 和核心同步合成器 @synthesize finalFrame; 对于声明为 CGRect finalFrame; 给出了错误 属性“finalFrame”的类型与ivar“finalFrame”的类型不匹配 无法识别的insn: 内部编译器错误:总

这可能是iPhone特有的,我不确定。编译器在为模拟器编译时不会抱怨,但在为设备编译时,当我尝试设置对象引用的属性时,它会抛出一些奇怪的错误。例如

@property (nonatomic) CGRect  &finalFrame;
和核心同步合成器

@synthesize finalFrame;
对于声明为

CGRect finalFrame;
给出了错误

  • 属性“finalFrame”的类型与ivar“finalFrame”的类型不匹配
  • 无法识别的insn:
  • 内部编译器错误:总线错误
  • 内部编译器错误:在摘录中,记录c:2904
但是,我可以通过以下方法手动执行此操作,而不会出现问题:

- (CGRect&)finalFrame;
- (void)setFinalFrame:(CGRect&)aFrame;

这是一个gcc错误吗?它为模拟器编译。

您的属性声明为引用类型(
CGRect&
),但您的实例变量不是引用类型(
CGRect
)。它们必须相同才能使用
@synthesis


也可以,使用C++引用类型作为Objto-C属性有点奇怪,但是我猜想只要所有的文件都被编译成Objto-C++.</P>,代码可能无法编译,因为代码>和< /> >不是Objto-C中的声明符(换句话说,它不能用作变量声明的一部分)。你的意思是在示例代码中有符号和字符的地方键入星号吗?使用Obj-C++,应该明确指出,很抱歉,它在模拟器上编译和工作,这对我来说似乎很奇怪。我读过的所有文档都表明,属性/合成配对应该只是我手动声明的内容的简写(这是有效的)。我知道变量没有声明为CGRect&但当然不应该这样。奇怪吗?我不认为使用引用有什么错。我应该说明我使用的是Obj-C++,我的意思是我理解属性需要与变量相同的数据类型,但是如果它不能处理引用,那么它肯定是机制中的一个错误?也许我对属性缺少一些基本的理解,因为我一直认为它们本质上是预处理到方法中的,比如我发布的那些方法。@Sam:说它是预处理到方法中的是不正确的。

@synthesis
指令导致生成方法,但它不像预处理器宏那样是哑文本替换。为了生成适当的方法,编译器必须匹配这些类型,而且显然它对引用的理解不够好,无法生成将引用绑定到正常数据类型的适当方法。我想你可以称之为bug,但实际上它只是一些不受支持的东西。。在C++中没有空引用这样的东西,编译器不会让你声明一个引用类型而不需要初始化。这正是这里可能发生的事情。