2013-05-20 52 views
3

我對自我指針有輕微的困惑。我明白如果我想在目標C中使用self,我需要將它作爲參數傳遞給自我指針,與C++一起使用Objective C

someFunction(id self) 
{ 

} 

我怎麼樣不過稍顯混亂的是,如果我想用自己的成員變量,我得到以下錯誤

屬性「瀏覽器」的類型的對象__strong ID找不到。

我在我的頭文件中定義的瀏覽器爲:

@property webBrowser* browser; 

我則想打電話給我的web瀏覽器類的功能在我的C++函數:

[self.browser StartSearch:self]; 

中出現的錯誤上面的線。如果我改爲將self的成員變量作爲參數傳遞,該函數肯定會正確調用。儘管如此,這感覺相當黑客。

任何解釋爲什麼它不起作用和替代將是很好的。

+0

按照約定,Objective-C方法以小寫字母和大寫字母開頭。遵循這些約定使代碼更具可讀性。 – zaph

+0

我來自C++背景,所以我很抱歉。 – Bushes

+0

沒有必要道歉,只是試圖幫助,我也來自C++。 – zaph

回答

3

爲了使用屬性的語法與點,則需要由id指針投射到您的類的類型,以提供準確的類型,編譯器,例如。如果您不想使用確切類型或強制類型,請使用方法調用語法:

[[self browser] StartSearch:self]; 
+0

這一款完全適合我的需求,但我相信其他答案也一樣有效。 – Bushes

+0

通常使用正確的類型代替'id'是一種更好的做法,因爲它既具體,也允許編譯器執行靜態類型檢查。 – zaph

2

你可以簡單地指定參數類型,而不是使用一個通用的id

void someFunction(MONObject * self) { 
    [self.browser StartSearch:self]; 
} 

或者,如果你覺得你真的,真的,真的需要的類型擦除(如編譯防火牆),你可能會考慮重寫它是這樣的:

// Some.mm 
void someFunction(id self) { 
    MONObject * object(self); 
    [object.browser StartSearch:self]; 
}