我想为 iPhone 创建一个便携式库,也可以用于其他平台。
我的问题是休耕:
有谁知道在 iPhone 上最好使用什么:Objective-C 或 Objective-C++?它与 C++ 的工作方式是否与使用 C 的 Objective-C 相同?
理由: Objective-C 是 C 的超集,而 Objective-C++ 是 C++is not
的超集。
提前致谢!
更新:在相同的用例实现中,内存使用和速度如何?
UPDATE1:如果有人可以提供更多信息,他将受到欢迎。
我想为 iPhone 创建一个便携式库,也可以用于其他平台。
我的问题是休耕:
有谁知道在 iPhone 上最好使用什么:Objective-C 或 Objective-C++?它与 C++ 的工作方式是否与使用 C 的 Objective-C 相同?
理由: Objective-C 是 C 的超集,而 Objective-C++ 是 C++is not
的超集。
提前致谢!
更新:在相同的用例实现中,内存使用和速度如何?
UPDATE1:如果有人可以提供更多信息,他将受到欢迎。
如果你正在编写一个可移植的库,并且不需要特定的语言特性,为什么不直接用 C 语言编写呢?它可以很容易地从 C++、C、Objective-C 和许多其他语言中调用。
如果您需要 C 中没有的特定语言功能,您应该告诉我们它们是什么,以便您获得更好的建议 =)
我认为您的信息不正确。Objective-C++是C++的超集。任何 C++ 都是合法的 Objective-C++。此外,您可以在 Objective-C++(通常为 .mm)文件中混合 Objective-C 和 C++ 代码,并且(有一些限制)在 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++)。除了调用代码的任何差异之外,Objective-C 和 Objective-C++ 之间没有性能差异(例如,如果你是一个更好的 C++ 开发人员,你的 C++ 可能会比你的 C 库更有效,反之亦然)。
它们并不是真正不同的语言。Objective-C++ 只是 Objective-C,对包含 C++ 代码的支持略有限制。Objective-C 是标准方言,但如果您需要使用 C++,没有理由不使用它。AFAIK,最大的实际区别(除了允许使用不同的库)是 Objective-C++ 似乎编译得有点慢。如果您决定走这条路,请务必先阅读它,因为 C++ 和 Objective-C 的合并不是 100% 无缝的。
如果你打算在 iPhone 和 Mac OS 以外的平台上使用这个库,你应该使用 C++。如果您只打算将其移植到 Mac OS,请继续使用 Objective-C。Objective-C++ 只是将现有 C++ 代码集成到 Objective-C 项目中的一种方式。因此,您不会在其中编写库。但是,您可以使用 Objective-C++ 从 iPhone 或 Mac 项目中使用这个库。
事实上,您可以在 Xcode 中使用 C 或 C++。将 Objective C 用于 Cocoa 和 Cocoa Touch (iphone) 的原因是因为它易于使用以及它如何处理您自己会遇到的许多内存问题。Objective C 和 Xcode 像梦一样工作。我还建议查看http://www.kevincallahan.org/software/accessorizer.html Accessorizer 非常棒,可以将开发时间缩短到零。
话虽如此,我认为用 C 或 C++ 编写函数/方法并在 XCode 项目的一部分中使用它们没有问题。只是不要期望使用 Objective C 在其他平台上也能很好地发挥作用。Apple 和 Windows 开发 IDE 是不同的,Microsoft 有一个很好的习惯,即不使事物与其他环境(不仅仅是 Apple)兼容。
我很高兴听到有人说他们试图将他们的代码重用于其他项目:) 现在有太多人忘记创建自己的库,我一点也不知道为什么。
我希望这有帮助。干杯,马修
这是您的警告:花一百美元成为开发人员并启动您将在 Mac 上使用的 IDE 的 xcode - 这将是您做出决定的最佳方式,因为很明显您并不完全了解该平台的工作原理一点也不。
请不要对所有试图帮助你的人无礼。这个社区建立在尊重之上。这里的人真的很乐于助人,也很关心,网上这样的地方已经很少了。
选择 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++ 的严格超集。” - https://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/CppRuntimeEnv/Articles/SymbolVisibility.html