冒着过度简化某些事情的风险,我担心这可能会非常复杂,在混合使用C和Objective-C时我应该注意什么?
编辑:为了澄清,我以前从未使用过C,而且我正在通过Cocoa学习Objective-C。我也在使用Chipmunk Dynamics引擎,它是C。
答案 0 :(得分:14)
我反过来说:你可能冒着过于简单的过于复杂的风险: - )
好的,我有点油腻。正如其他人指出的那样,Objective-C实际上只是C语言扩展的最小集合。当您编写Objective-C代码时,您实际上正在编写C.您甚至可以访问Objective-C运行时支持的内部机制使用一些方便的C函数作为语言的一部分(不......我不建议你实际做这个,除非你真的知道你在做什么)。
关于我曾经遇到过某种轻微棘手时刻的唯一一次,我想将Objective-C实例方法作为回调函数传递给C函数。比如说,我正在使用一个纯C跨平台库,它具有接受回调的功能。我可以在一个对象实例中调用该函数来处理一些数据,然后希望该C函数在完成后调用我的实例BACK,或者作为获取额外输入等的一部分(C中的常见范例)。这可以通过时髦的功能包装和我见过的其他一些创造性方法来完成,如果你需要使用Google搜索“c-callback的Objective-c方法”或类似的东西,它将为你提供货物。
唯一的另一个建议是确保您的对象适当地管理它们为C函数创建的任何手动malloc
内存。你会希望你的objective-c类在dealloc上整理那个内存,如果它确实已经完成了。
除此之外,灰尘消除C上的任何参考并且玩得开心!
答案 1 :(得分:7)
你不能'混合'C和Objective-C:Objective-C是C的超集。
现在,C ++和Objective-C另一方面......
答案 2 :(得分:1)
Objective C是C的超集,所以它不应该冲突。
除了指向here之外,纯C具有不同的约定(显然,因为没有内置机制)来处理OO编程。在C中,对象只是一个带有函数指针的(struct *)。