混合C ++和Objective C

时间:2012-03-28 14:38:11

标签: objective-c objective-c++

在哪里可以找到关于在Objective-C中使用C ++的具体文档或dos和donts文档?

Apple似乎已经从他们的网站上删除了该文档,我很困惑地整理了博客中的一些信息和这里发布的问题。

任何人都可以指导相同的事情。

  
    

我们什么时候使用.mm文件,混合语法或在.m文件中使用属于C ++类的对象?

         

虽然在属于两种不同语言的函数之间传递对象,比如将objective-c对象传递给cpp文件中的函数,但是有必要在void *中收集它,或者我可以使用(ObjectiveC inteface)*?

  

2 个答案:

答案 0 :(得分:6)

无论何时#include / #import或直接在同一文件中编写Objective-C和C ++代码,都需要使用Objective-C ++。使用显式代码通常很明显; #include通常不那么重要,你需要注意避免将其中一种语言“泄漏”到另一种语言中。您{C}头文件#import的示例是明确的:您只能使用Objective-C ++来实现。请注意,如果您的Cplusplusstruct类型,则可以向前声明,而不是#import C ++标题。

如果你在标题中执行此操作,它将“中毒”标题仅在该模式下工作。您需要主动避免这种情况,否则您的整个项目很快就会以.mm文件结束。 I have documented some techniques in this articlepreviously, in this earlier article。对于较新版本的Objective-C,您还可以将ivars添加到类扩展中的类中。这意味着您可以在.mm文件中定义C ++类型的ivars,标题,这允许.m文件到#import

对于您的第二个问题(请一次只提出一个问题):id类型在objc.h标题文件中以C语言定义,因此在Objective-C和C ++中工作。同样,Objective-C运行时API也是根据C函数公开的,它也适用于C ++。如果您确实希望使用C ++代码中的规范语法在Objective-C对象上发送消息和访问属性,则需要将该文件切换为Objective-C ++。

答案 1 :(得分:3)

当您的代码中包含c ++语法或包含包含c ++代码的文件时,请使用.mm文件。

将C ++与objective-c混合使用可能有点令人困惑,但如果你认为指针比它不是一个大问题。像在C ++中一样处理C ++对象实例方法,对于客观c对象也是如此。