BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

在Visual Studio中将Objective-C编译为C++

| 作者 Jonathan Allen 关注 595 他的粉丝 ,译者 刘振涛 关注 23 他的粉丝 发布于 2015年5月9日. 估计阅读时间: 4 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

曾有人谣传微软Windows 10平台将支持运行Android程序,没有人会预料到iOS应用也将得到同样的支持。目前,微软正结合C2和Clang使之变为可能。

编译器支持

谷歌和苹果都使用Clang作为他们的C++前端,微软将Clang与Visual C++编译器的后端C2结合,以此来支持在Windows上运行Android和iOS程序。

苹果的Objective-C同样使用Clang作为前端,所以一旦Clang与C2整合完成,他们也将获得解析并编译Objective-C的能力。

IDE支持

Visual Studio中的Objective-C支持语法高亮、代码补全、和代码调试功能。C++和C#文件可以被引入到相同的项目中,允许程序直接跨边界调用。编译器将处理所有封送工作,所以开发者只会看到普通的函数调用。

大多数Objective-C项目都以建立XCode项目开始,所以Visual Studio将支持导入XCode项目,VS和XCode项目文件可在混合模式项目中共存,因此可以在两种IDE中同时开发这个项目。

混合模式项目

Windows为Objective-C应用提供了新的API,例如:动态磁贴。为了确保可以继续在平台间共享代码,微软允许你在调用Windows API前通过运行时检查它们是否可用。或者, 你可以使用预处理器指令显式地隔离平台特定代码与共享代码。

运行时行为

Windows的Objective-C运行时默认通过检测应用原始平台来决定具体行为。举个例子:如果你移植某个iPhone应用,那么它将默认运行在一个小窗口中,而从iPad移植的应用将默认运行在常规大小的窗口中。

所有这样的行为可以在需要时被应用覆盖。

iOS API兼容性

Windows 10支持iOS API的一个“合理子集”,它不会对应于iOS的某个版本,而是通过查看指标来寻找最常用的API。在第一个版本中,微软将关注以下API:

  • 游戏:对OpenGL、OpenAL和传感器提供良好的支持
  • UI:UIKit、核心动画、核心图形、核心文字、触控
  • Objective-C:自动引用计数、代码块、Foundation框架

对于像分享、消息提示、存储组件这样的功能,开发者需要选择是继续使用iOS API,还是切换到Windows替代解决方案。如果你选择继续使用iOS API,Windows将提供一个兼容层来支持API正常运行;当然,微软更希望你使用他们提供的解决方案,这样你就可以访问高级Windows特性。

Swift

对于Swift,微软官方的立场是“暂不评论”。而在私下交流中,他们透露出支持Swift的意愿,但由于要在秋天到来前忙于准备Objective-C,以致于没有资源可以提供给Swift。

查看英文原文:Compiling Objective-C into C++ with Visual Studio


感谢邵思华对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群InfoQ好读者)。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT