在哪里可以找到关于在Objective-C中使用C ++的具体文档或dos和donts文档?
Apple似乎已经从他们的网站上删除了该文档,我很困惑地整理了博客中的一些信息和这里发布的问题。任何人都可以指导相同的事情。
我们什么时候使用.mm文件,混合语法或在.m文件中使用属于C ++类的对象?
虽然在属于两种不同语言的函数之间传递对象,比如将objective-c对象传递给cpp文件中的函数,但是有必要在void *中收集它,或者我可以使用(ObjectiveC inteface)*?
的
答案 0 :(得分:6)
无论何时#include
/ #import
或直接在同一文件中编写Objective-C和C ++代码,都需要使用Objective-C ++。使用显式代码通常很明显; #include
通常不那么重要,你需要注意避免将其中一种语言“泄漏”到另一种语言中。您{C}头文件#import
的示例是明确的:您只能使用Objective-C ++来实现。请注意,如果您的Cplusplus
是struct
类型,则可以向前声明,而不是#import
C ++标题。
如果你在标题中执行此操作,它将“中毒”标题仅在该模式下工作。您需要主动避免这种情况,否则您的整个项目很快就会以.mm文件结束。 I have documented some techniques in this article和previously, 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对象也是如此。