c++ - 从 C/C++ 使用 UIKit

标签 c++ iphone objective-c uikit

问题可能已经问过了,但我想知道 iPhone 的框架是否仅限于 Objective-C 使用,还是也可以从 C/C++ 代码访问?

例如,是否可以通过 C/C++ 代码使用标准 iPhone 控件? NSArray、NSSet 等标准类是否可以从 C/C++ 代码访问?

如果是,任何人都可以提供一些示例的链接吗?

最佳答案

您可以将 Objective C 与 C++ 混合使用。只需将您的源文件重命名为 .mm

一些基础类如 NSArray 和 NSSet 是通向 CoreFoundation 对象如 CFArray 和 CFSet 的免费桥梁。后者是一个纯 C 库,您可以在没有 ObjC 的情况下使用。


UIKit 是一个纯 Objective-C 框架。您可以将 UIKit 与 C 和 C++ 一起使用,因为 Objective-C 运行时可以从纯 C 函数访问,例如 objc_msgSend,例如

id UIView = objc_getClass("UIView");
SEL alloc = sel_registerName("alloc");
id view = objc_msgSend(UIView, alloc);
// ...

但它并不可靠,例如

objc_msgSend(view, sel_registerName("setAlpha:"), 0.4);

不会做你想做的事。

您可以隔离 UI 部分并只为该部分编写 ObjC。在 UI 和后端之间创建一个 C 接口(interface),您可以使用 C++ 或任何(允许的)语言。

关于c++ - 从 C/C++ 使用 UIKit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3038693/

相关文章:

c++ - 对取消引用的 NULL 指针的引用是否会在 C++ 中创建或访问时产生 UB

ios - 从 iPhone 到通用应用程序问题

iphone - didReceiveRemoteNotification - 在当前 View Controller 中调用函数

ios - 如何在 iphone 的导航栏中添加右栏按钮

iphone - iOS 初始化参数为 nil

iphone - 如何在 iPhone 的 UIImageView 上从远程服务器加载图像?

c++ - 由 traits [policies, actually] 实例化的类成员函数

c++ - C++11 是否允许 vector<const T>?

c++ - 我可以为 QObject 的子类创建复制构造函数吗?

ios - objc_exception_throw/崩溃/堆栈跟踪