2010-03-04 66 views
3

這可能是iPhone專用的,我不確定。編譯器不會在爲模擬器構建時發生抱怨,但在爲設備編譯時會引發一些時髦的錯誤,當我嘗試爲對象的引用設置屬性時。例如,Objective-C,用於參考的屬性

@property (nonatomic) CGRect &finalFrame; 

和coressponding合成

@synthesize finalFrame; 

聲明爲

CGRect finalFrame; 

一個變量提供錯誤

  • 類型的特性 'finalFrame' 不匹配類型的伊娃'finalFrame'
  • 無法識別的insn:
  • 內部編譯器錯誤:總線錯誤
  • 內部編譯器錯誤:在extract_insn,在recog.c:2904

但是我可以手動做沒有問題,用下面的方法:

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

這是一個海灣合作委員會的錯誤?它爲模擬器編譯。

+1

該代碼無法編譯,因爲'&'不是Objective-C中的聲明符(換句話說,它不能用作變量聲明的一部分)。你的意思是在你的示例代碼中有&符號的地方輸入星號嗎? – jlehr 2010-03-04 17:08:40

+0

使用Obj-C++,應該明確指出,對不起 – Sam 2010-03-04 22:28:41

回答

5

你的屬性被聲明爲引用類型(CGRect&),但你的實例變量不是引用類型(CGRect)。他們需要使用相同的@synthesize

另外,使用C++引用類型作爲Objective-C屬性有點奇怪,但我想這可能會工作,只要所有文件都被編譯爲Objective-C++。

+0

似乎很奇怪,它編譯和工作在模擬器上。我讀過的所有文檔都指出,屬性/合成配對應該只是我手動聲明的內容的縮寫。我明白這個變量沒有被聲明爲CGRect&但當然不應該。 這是不是很奇怪?我沒有看到使用引用有任何問題。我應該說我正在使用Obj-C++ – Sam 2010-03-04 22:28:12

+0

我的意思是我明白該屬性需要與變量相同的數據類型,但如果它無法應對引用,肯定會出現該機制中的錯誤?也許我錯過了對屬性的一些基本理解,因爲我一直認爲它們基本上被預處理成了諸如我發佈的那些方法。 – Sam 2010-03-04 22:31:04

+1

@Sam:說它被預處理成方法是不正確的。 '@ synthesize'指令可以生成方法,但並不像預處理器宏那樣無用的文本替換。編譯器必須將類型匹配起來才能生成適當的方法,顯然,它不能很好地理解引用,以便生成將正常數據類型綁定到引用的適當方法。我想你可以把它稱爲一個錯誤,但實際上它只是不被支持的東西。 – Chuck 2010-03-04 23:29:21