2011-05-07 108 views
1

C文件可以從.c.m文件被修改,並且可以是從其他目標C文件(.m文件)調用。目標C與目標C++

C++文件可以從.cpp.mm文件被修改,並且可以從其他目標C++文件(.mm文件)被調用

.m文件可以從.mm文件被稱爲。但.mm文件不能從.m文件調用。

目標C++在iPhone開發編碼必要UI將在目標C和實施的任何其他協議不能客觀C++,因爲這(書面協議)將從UI叫這寫成目標C

在什麼方案是這樣的Objective C++編碼使用?

+0

請注意星號('* ... *'或'** ... **')而不是反引號('\'... \'')。後者用於格式化內聯代碼。 – kennytm 2011-05-07 11:57:19

+0

@KennyTM:謝謝你告訴我如何進行格式化,我的下一個格式化就是這樣做的。 – spandana 2011-05-07 12:07:55

回答

2

.m文件可以從.mm文件中調用。但.mm文件不能從.m文件中調用。

不知道你是什麼意思,但我認爲這是錯誤的。

Objective-C(++)的「Objective」部分在兩種語言中都是相同的。不管實現是Objective-C還是Objective-C++,對象都是完全可互操作的。

重要的是聲明接口的頭文件。例如:

@interface Foo 
{ 
    CPPFoo myFoo; // A C++ object 
} 

@end 

可以不包括在正常的Objective-C的.m文件,因爲C++類的C.是非法的來解決這個問題的方法之一是使用前置聲明和指針如

#if defined __cplusplus 
class CPPFoo; 
#else 
typedef struct CPPFoo CPPFoo; 
#endif 

@interface Foo 
{ 
    CPPFoo *myFoo; // NOTE: a pointer to a C++ object 
} 

@end 

你需要新的-init指針和-dealloc/-finalize


刪除它

號以前我覺得目的C++在iPhone開發的編碼需要(來自C++背景),最好只在UI中使用C++和Objective-C。然而,我沒有多久意識到Objective-C的對象模型比C++更好。所以現在我會在只有兩種情況考慮C++:

接口來寫在C++
  • 如果性能是很重要的庫時
    • ,你需要在對象模型的建立(即你不希望使用純C)
  • 4

    Objective-C++用於任何時候想要混合Objective-C代碼和C++代碼。

    您聲明「.mm文件不能從.m文件中調用」不正確。如果您將C++ 放在標頭中,那麼您無法從純粹的Objective-C文件調用它,但對於具有使用C++的實現的類,您可以擁有純粹的Objective-C接口。一個常見的例子是將現有的C++類(也許是一些現有的庫)封裝爲Objective-C類。