iOS开发中的Objective-C++

9

能否使用Objective-C++进行iOS应用程序(iPhone、iPad、iPod touch)开发?

互联网上是否有任何示例和源代码?


2
我想知道是什么吸引了你学习C++?一些iOS游戏会使用一点C++,但在iPhone上并没有太多涉及,因为Cocoa-Touch使大部分C++的优势变得多余。我找到了这个链接:https://dev59.com/LW865IYBdhLWcg3wduWH#3804297 其中标记的答案非常有帮助。 - Aurum Aquila
2个回答

13

使用ObjC++非常容易。 您需要使用扩展名.mm声明源文件,这会使编译器将它们视为ObjC ++。 头文件也是如此:请使用.hh扩展名。

还有另一种选项:转到目标设置并将“编译源代码为”设置为Objective-C ++。

就这样。不需要其他工作。

一些注意事项:如果要开发本地iOS应用程序,请使用Objective C。这将节省大量时间。 但是在某些情况下,使用C ++更加合适。例如,用于跨平台开发。因此,您仅在iPhone上使用少量的Objective C或在Android上使用Java来将代码与环境粘合在一起。 其他所有内容都在C ++中。我在我的跨平台游戏开发中使用此方法。

另一个案例是性能:Objective C原则上比C ++慢。 但是只有在方法调用(在ObjC中称为消息传递)期间才会显着表现出来。


3
为了跨平台的目的,通常会将视图类纯粹地写成 Objective-C,控制器完全为 Objective-C,但编译为 Objective-C++,以便可以调用完全使用 C++ 编写的模型。您可以通过直接钩入运行时来改善所有 Objective-C 的动态分派调用,因为您可以获取任何方法的当前 C 函数指针,但这样做很丑陋并且不适合面向对象的模型。 - Tommy
@Tommy,你说得完全正确。但是我已经说过,我只使用最少量的Objective C来绑定系统(例如触摸事件或CAEAGLLayer来绑定OpenGL)。但是我不在C++类中使用Objective C。只是在Objective C中使用C++,以便与系统保持最小接口。 - Max
1
是的,这只适用于游戏。如果你不开发游戏,我不认为在iPhone或Android上使用C++有任何理由。 - Max
将注意力集中在Objective-C中的消息传递速度上可能有点过早优化。在原始iPhone上,消息传递大约与浮点除法一样慢,因此它们绝不是绝大多数时间的瓶颈。请参考:http://www.mikeash.com/pyblog/performance-comparisons-of-common-operations-iphone-edition.html。 - Brad Larson
@Brad Larson:相比于C++的虚方法调用,它慢了超过两倍(我想非虚拟调用会慢得多)...虽然我没有说这是真正的瓶颈,但它确实更慢。语言选择更像是应用程序架构的问题。顺便说一句,谢谢你提供的链接,真的很有趣 =) - Max
显示剩余4条评论

0

可以的。看一下苹果提供的示例和新文件模板。


7
我很想知道这些模板在哪里。 :-) - NoEvilPeople
@NoEvilPeople 记录一下,这里有一个 >:)https://developer.apple.com/library/ios/samplecode/aurioTouch/History/History.html#//apple_ref/doc/uid/DTS40007770-RevisionHistory-DontLinkElementID_1 - bodacious

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接