iPhone开发中,C语言和C++语言(Objective-C和Objective-C++)有什么区别?

17

我想要创建一个可用于iPhone和其他平台的便携式库。

我的问题是:

有人知道在iPhone上最好使用Objective-C还是Objective-C++吗?它是否能像Objective-C与C一样与C++配合使用?

原因:Objective-C是C的超集,但Objective-C++不是C++的超集。

谢谢!

更新:在相同的用例实现中,内存使用情况、速度如何?

更新1:如果有人能提供更多信息,他将受到欢迎。


4
除非是真正的代码,否则您可能不应该将任何内容放入语法高亮环境中。 - Jonathan Sterling
6
Objective-C++ 是 C++ 的超集。 - Barry Wark
Barry Wark,请给我一个链接,我可以在那里找到它。这是C++和Objective-C之间的<b>混合</b>。 - mxg
2
http://en.wikipedia.org/wiki/Subset - Barry Wark
Barry Wark,Objective-C++ 是有限制的。并不是你能用 C++ 写的所有东西都能用 ObjC++ 写。 - mxg
Barry Wark,Objective-C是C的超集,而不是子集。在ObjC++中,您不能做C++中可以做的所有事情。因此,这意味着ObjC++是C++子集的超集。 - mxg
8个回答

20
如果您正在编写一个可移植的库,并且不需要特定的语言功能,为什么不用纯C编写呢?它可以轻松地从C++、C、Objective-C和许多其他语言中调用。
如果您需要特定的语言功能,而这些功能在C中不可用,那么您应该告诉我们您需要什么功能以便获得更好的建议 =)

17

我认为你的信息是不正确的。Objective-C++ C++ 的超集。任何 C++ 代码都是合法的 Objective-C++ 代码。此外,你可以在 Objective-C++ 文件中混合 Objective-C 和 C++ 代码(通常使用 .mm 后缀),并且(有一些限制下)在 Objective-C++ 类中混用 Objective-C 和 C++ 的类实例变量。Objective-C++ 特别适用于在 Objective-C 和 C++ 库之间进行接口编程。你可以使用 C++ 编写跨平台库,然后在应用程序中从 Objective-C++ 调用它。详见 Objective-C 语言指南中的 Objective-C++ 章节

使用 Objective-C++ 的主要缺点是增加了编译时间(Objective-C++ 比 C++ 还要慢,并且 Clang LLVM 编译器还不能很好地处理 Objective-C++)。除了调用的代码有所不同(例如,如果你是更优秀的 C++ 开发人员,则你的 C++ 可能比你的 C 库更高效,反之亦然),Objective-C 和 Objective-C++ 之间没有性能差异。


我错误地投了赞成票,但是Objective-C++并不是C++的超集。请仔细阅读。你给我的链接里有文档。 "苹果的Objective-C编译器允许您在同一源文件中自由混合使用C++和Objective-C代码。这种Objective-C/C++语言混合称为Objective-C++。" - mxg
6
正如我在帖子中所说,我认为任何有效的C++代码都是有效的Objective-C++代码,但不是所有有效的Objective-C++代码都是有效的C++代码。因此,Objective-C++是C++的(严格)超集,就像Objective-C是C的(严格)超集一样。我认为您误解了所引用文本的含义。 - Barry Wark
请查看此答案:https://dev59.com/J3RB5IYBdhLWcg3wv5s_#529017 - Barry Wark
这是苹果开发者文档中的页面:https://developer.apple.com/mac/library/documentation/DeveloperTools/Conceptual/CppRuntimeEnv/Articles/SymbolVisibility.html#//apple_ref/doc/uid/TP40001670 - Barry Wark

11

它们并不是完全不同的语言。Objective-C ++ 只是对包含 C++ 代码的支持略有限制的 Objective-C。Objective-C 是标准方言,但如果需要使用 C++,没有理由不使用它。据我所知,最大的实际区别(除了允许使用不同的库)是 Objective-C++ 编译速度似乎稍慢。如果你决定采用这种方法,请确保先阅读相关资料,因为 C++ 和 Objective-C 的合并不是100%无缝的。


7

如果您打算在iPhone和Mac OS以外的平台上使用此库,则应使用C ++。如果您计划仅将其移植到Mac OS,则可以使用Objective-C。 Objective-C ++只是一种将现有的C ++代码集成到Objective-C项目中的方法。因此,您不会在其中编写库。但是,您可能会使用Objective-C ++从iPhone或Mac项目中使用此库。


3
事实上,您可以在Xcode中使用C或C ++。之所以要使用Objective C用于Cocoa和Cocoa Touch(iPhone),是因为它易于使用,并且能够很好地处理许多独立遇到的内存问题。Objective C和Xcode完美结合。我还建议查看http://www.kevincallahan.org/software/accessorizer.html Accessorizer非常棒,可以将开发时间减少到最低。

话虽如此,我认为在XCode项目的某个部分编写C或C ++函数/方法并使用它们也没有问题。只是不要期望Objective C在其他平台上表现得像对待自己一样好。Apple和Windows开发IDE是不同的,Microsoft有一个不与其他环境(不仅限于苹果公司)兼容的习惯。

我很高兴听到有人试图为其他项目重复使用他们的代码:)现在太多人忘记创建自己的库,我完全不知道为什么。

希望这可以帮到您。干杯,马修


3
这里有一个提示:花100美元成为开发者,并启动xcode IDE,这是你将在Mac上使用的IDE。这是你决定的最佳方式,因为显然你并不完全理解这个平台的工作方式。
请不要对每个试图帮助你的人都很无礼。这个社区建立在尊重的基础上。这里的人真的会提供帮助和关心,而且在网络上像这样的地方已经很少了。

1

选择C或C++ - 我不认为在不了解你的目标的情况下推荐其中一种有任何理由。

就内存使用而言,C++和C确实需要更加纪律严明的编码。就速度而言,C和C++几乎在任何情况下都比任何ObjC/ObjC++解决方案更快。我经常将我的Objective C应用程序与C和C++代码混合使用,并且总是对结果感到满意。正如Jonathan所说,ObjectiveC++主要是一个桥梁,用于在您的Objective C应用程序中使用C++代码/库。

您可以自由地在Objective C++中使用C++对象。但是,您无法在C++中使用Objective C/C++对象。因此,这是单向道路。为了克服这种限制所带来的任何限制,只需在需要时使用Objective C++类包装您的C++对象即可。


我了解这全部内容。正如你所知,Objective-C是C的超集,但Objective-C++不是C++的超集。因此,这意味着根据Objective-C++的实现可能会出现一些意外情况。这就是我想问的,是否会有任何意外情况? - mxg
从未遇到任何隐藏的陷阱。 - Till

1

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