2011-05-07 106 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类。