使用C与Cocoa而不是Objective-C?

使用C与Cocoa而不是Objective-C?,第1张

概述我想编写使用C和Cocoa框架的应用程序,因为苹果没有使得64位能力。 C似乎在Linux和Windows上的实现是相当的香草,但是在Mac OS X上似乎需要额外的Apple特定的代码片段(像Obj-C包装器)。也似乎苹果正在迫使开发人员写Objective-C而不是C,虽然我可能是错的。 我试图找到一个路径,在Mac上写代码,这将是很容易保持跨平台。必须在C / Linux / Windows 我想编写使用C和Cocoa框架的应用程序,因为苹果没有使得64位能力。 C似乎在linux和windows上的实现是相当的香草,但是在Mac OS X上似乎需要额外的Apple特定的代码片段(像Obj-C包装器)。也似乎苹果正在迫使开发人员写Objective-C而不是C,虽然我可能是错的。

我试图找到一个路径,在Mac上写代码,这将是很容易保持跨平台。必须在C / linux / windows上编写代码,然后在Objective-C中重写大部分将是非常低效的。

有没有办法在C中编写代码将支持未来和Xcode支持?此外,如果这是可能的,我将如何混合C和Objective-C在Xcode?谢谢。

解决方法 你不能在C中编写一个Cocoa应用程序。 Cocoa很大程度上依赖于Objective-C的许多核心技术的后期绑定功能,例如键值绑定,委托(可可风格)和目标动作模式。后期绑定要求使得在编译时绑定的类型语言(如Cⁱ)中实现Cocoa API非常困难。当然,你可以编写一个在OS X上运行的纯C应用程序。它不能使用Cocoa API。

因此,如果您想在其他平台上的C应用程序和基于Cocoa的应用程序之间共享代码,您有两个选项。第一个是在C中编写模型层,在Cocoa中编写GUI。这是一些非常大的应用程序使用的常见方法,包括@L_419_0@.你的C代码可以保持不变(你不需要“时髦的”苹果扩展写或编译C在OS X上)。你的控制器层可能会使用Objective-C(也许你引用的“时髦”的苹果扩展)。 Objective-C是C的超集,就像Objective-C是C的超集一样。在Objective-C中,你可以在C中创建objc风格的消息传递调用(如[some-objc-object callMethod]功能。相反,你可以从ObjC代码中调用C函数,如:

@interface MyClass {    MyCPPClass *cppInstance;}@end@implementation MyClass- (ID)init {    if(self = [super init]) {        cppInstance = new MyCPPClass();    }    return self;}- (voID) dealloc {    if(cppInstance != NulL) delete cppInstance;    [super dealloc];}- (voID)callCpp {    cppInstance->SomeMethod();}@end

您可以在Objective-C语言guide中找到有关Objective-C的更多信息。视图层可以是纯粹的Objective-C。

第二个选项是使用跨平台C工具包。 Qt工具包可能适合帐单。跨平台工具包通常被Mac用户鄙视,因为他们没有得到所有的L& F细节完全正确,Mac用户期望在Mac应用程序的UI中抛光。 Qt做了一个令人惊讶的好工作,然而,根据受众和应用程序的使用,它可能是足够好。此外,您将放弃一些特定于OS X的技术,例如Core Animation和一些QuickTime功能,尽管在Qt API中有大致的替换。正如你所指出的,Carbon不会移植到64位。由于Qt是在Carbon API上实现的,Trolltech / Nokia不得不将Qt移植到Cocoa API以使其64位兼容。我的理解是,Qt的下一个更新(目前在release candiate)完成此转换,并在OS X上64位兼容。你可能想看一看Qt 4.5的源如果你有兴趣集成C和Cocoa API。

ⁱ一段时间,Apple将Cocoa API提供给Java,但是该桥需要大量的手动调整,并且无法处理更高级的技术,例如上述的键值绑定。目前动态类型,运行时绑定的语言,如Python,Ruby等是编写一个没有Objective-C的Cocoa应用程序的唯一真正的选择(当然这些网桥使用Objective-C)。

总结

以上是内存溢出为你收集整理的使用C与Cocoa而不是Objective-C?全部内容,希望文章能够帮你解决使用C与Cocoa而不是Objective-C?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1049248.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存