【发布时间】:2009-04-03 19:02:05
【问题描述】:
冒着过度简化的风险,我担心可能会非常复杂,在混合 C 和 Objective-C 时我应该注意什么?
编辑:澄清一下,我以前从未使用过 C,我正在通过 Cocoa 学习 Objective-C。另外我使用的是 Chipmunk Dynamics 引擎。
【问题讨论】:
标签: c objective-c
冒着过度简化的风险,我担心可能会非常复杂,在混合 C 和 Objective-C 时我应该注意什么?
编辑:澄清一下,我以前从未使用过 C,我正在通过 Cocoa 学习 Objective-C。另外我使用的是 Chipmunk Dynamics 引擎。
【问题讨论】:
标签: c objective-c
我会反过来说:您可能会冒着使简单得离谱的事情过于复杂的风险:-)
好吧,我有点油嘴滑舌。正如其他人所指出的,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 上的任何引用都擦掉,玩得开心!
【讨论】:
您不能“混合”C 和 Objective-C:Objective-C 是 C 的超集。
现在,另一方面,C++ 和 Objective-C...
【讨论】:
Objective C 是 C 的超集,所以它不应该冲突。
除了,正如here 所指出的,纯 C 有不同的约定(显然,因为没有内置机制)来处理 OO 编程。在 C 中,对象只是一个带有函数指针的 (struct *)。
【讨论】: