【问题标题】:What are the pitfalls and gotchas of mixing Objective-C and C?混合 Objective-C 和 C 的陷阱和陷阱是什么?
【发布时间】:2009-04-03 19:02:05
【问题描述】:

冒着过度简化的风险,我担心可能会非常复杂,在混合 C 和 Objective-C 时我应该注意什么?

编辑:澄清一下,我以前从未使用过 C,我正在通过 Cocoa 学习 Objective-C。另外我使用的是 Chipmunk Dynamics 引擎。

【问题讨论】:

    标签: c objective-c


    【解决方案1】:

    我会反过来说:您可能会冒着使简单得离谱的事情过于复杂的风险:-)

    好吧,我有点油嘴滑舌。正如其他人所指出的,Objective-C 实际上只是 C 语言的最小扩展集。当您编写 Objective-C 代码时,您实际上是在编写 C。您甚至可以访问 Objective-C 运行时支持的内部机制使用作为语言一部分的一些方便的 C 函数(不...我不建议您实际执行此操作,除非您真的知道自己在做什么)。

    我遇到过的唯一一次有点棘手的时刻是,我想将 Objective-C 实例方法作为回调传递给 C 函数。比如说,我正在使用一个纯 C 跨平台库,它具有接受回调的函数。我可能会从对象实例中调用该函数来处理一些数据,然后希望该 C 函数在完成后调用我的实例 BACK,或者作为获取额外输入等的一部分(C 中的常见范例)。这可以通过时髦的函数包装和我见过的其他一些创造性方法来完成,如果你需要这样做,谷歌搜索“用于 c 回调的objective-c 方法”或类似的东西会给你带来好处。

    另外一个建议是确保您的对象适当地管理它们创建供 C 函数使用的任何手动 malloced 内存。如果确实完成了,您将希望您的 Objective-c 类在 dealloc 上整理该内存。

    除此之外,把 C 上的任何引用都擦掉,玩得开心!

    【讨论】:

      【解决方案2】:

      您不能“混合”C 和 Objective-C:Objective-C 是 C 的超集。

      现在,另一方面,C++ 和 Objective-C...

      【讨论】:

      • 我应该如何改写这个问题?
      • 这不是改写的问题。 Objective-C 包含所有的 C,所以根本没有混合。
      • 我明白你的意思,但请记住,我是任何风格的 C 新手,学习 cocoa 的重点是 Objective-C。但是,Chipmunk 是用纯 C 编写的。所以,我已经遇到了一个问题,即结构不是对象,即使对于一个新人来说,一开始看起来是一样的。
      • 假设你想使用 C 语言中的某些东西,并希望将其挂接到 Objective-C 框架中。
      【解决方案3】:

      Objective C 是 C 的超集,所以它不应该冲突。

      除了,正如here 所指出的,纯 C 有不同的约定(显然,因为没有内置机制)来处理 OO 编程。在 C 中,对象只是一个带有函数指针的 (struct *)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多