问题1:我读到Objective-C在底层使用C ABI?对吗?
问题2:但是在这种情况下,Objective-C是如何如此容易地与c++交互的呢?
我可以用Objective-C和c++建立一个静态库,而公共头是纯粹的Objective-C。问题3:不管合作伙伴的编译器版本如何,它是否足够稳定,可以在他们的iOS应用中使用?
问题1:我读到Objective-C在底层使用C ABI?对吗?
。Objective-C在运行时有自己的类注册链接规则等。不过,函数调用(消息传递)约定与C语言的约定是一致的。在任何情况下,它被认为是稳定的。
问题2:但是在这种情况下,Objective-C是如何如此容易地与c++交互的?
C和c++也可以直接互操作,所以我想问题是为什么不呢?
编译器需要确保的主要事情是Objective-C类的c++类型成员(ivars)正确地遵循c++构造函数/析构函数规则,并且在c++类中指向Objective-C类型对象的ARC指针正确地对c++构造/析构执行ARC保留/释放操作。这些方面确实工作正确。
问题3:无论其编译器版本如何,合作伙伴在其iOS应用程序中使用这是否足够稳定?
您使用的c++标准库(libc++)必须与您的库的使用者使用的版本兼容。然而,到目前为止,苹果公司已经确保这在操作系统和工具链版本之间都能很好地工作。如果您使用非常现代的标准库特性(例如std::variant
),您可能会发现这限制了可能的部署目标。