编辑:我的错,我指的是objective-c,不是c#。不知怎么回事,我想到的是iphone使用的c#。所以c#的答案很棒,谢谢,但它们有点无关紧要,抱歉。
我已经看过了,但找不到任何可以回答这个问题的东西,尽管一些人通过回答部分问题来缩短了问题。在一小群人之间,我们计划在iPhone和安卓上做一些工作,这两个人在很大程度上是分开的,但相互帮助,一些人在他们之间做图形工作。
但我们正在考虑在两者之间移动东西的可能性,不一定是应用程序,也许只是有用的类或其他东西。看看objective-c和Java,它们似乎具有相同的功能,最大的障碍是系统接口的东西,所以我们想知道,如果我们在每个系统上为这些东西创建一个抽象,这样它们就可以获得相同的输入(除非我是错的,否则不会给系统带来太大的压力?),编写一些在objective-c和Java之间转换的东西会有什么问题,比sdks中方法的位置更糟糕吗?或者,是否有一种语言的关键特性或其他语言中我们没有的东西,这意味着唯一的方法就是从头开始重写。
发布于 2010-07-29 18:27:52
我不会浪费时间去寻找iOS和Android之间的共同点。
跨平台几乎总是浪费时间和资源,除非跨平台功能是应用程序运行的核心。对于iPhone和安卓这样的平台来说尤其如此,这些平台都有定制的操作系统,并与硬件紧密合作。
从长远来看,跨平台开发环境会增加而不是减少复杂性。是的,这听起来很简单,但通常你会轻易地得到你想要的90%,然后你遇到了一个障碍,摧毁了你所做的所有储蓄,然后开始让你陷入困境。有许多简单的妥协和方形的钉子卡在圆孔里。
除非你的应用程序理论上可以从一个通用的网页中运行,否则跨平台不适合你。
在Objective-C和Java的具体情况下,虽然Java是Objective-C的后代,但它们没有现代的互操作性。您不能在另一个上使用其中一个的代码。
您应该花时间学习每个平台的特定API。没有捷径可走。
发布于 2010-07-27 20:01:03
像XMLVM,Codename One和iSpectrum这样的工具告诉我们,你实际上可以交叉编译Java代码(从Android应用程序或者从头开始创建)到在iPhone上运行的Objective-C代码,而不需要在苹果方面安装任何虚拟机。
我建议看Developing iPhone Applications using Java
不幸的是,苹果的Java许可协议禁止将
虚拟机移植到iPhone。在这个演示文稿中,我们介绍了一个开源Cocoa to-Objective-C交叉编译器,以及一个基于的Cocoa库的实现。在这些工具的帮助下,可以用纯Java编写iPhone应用程序。使用Cocoa的Java版本,可以将基于Java的iPhone应用程序作为Java桌面/小程序应用程序运行,该桌面/小程序应用程序可以交叉编译为在iPhone上本地运行。演讲将讨论Java-to-Objective-C交叉编译器以及基于Java的Cocoa版本的挑战。详情请访问:http://www.xmlvm.org/。
为了获得更多的洞察力,可以在here上找到更多关于从Frebruary 2010年交叉编译安卓应用程序到iPhone的讨论,这篇文章记录在http://www.xmlvm.org/android/:
安卓是一个面向移动设备的开源平台。由谷歌发起的Android受到了极大的关注。Android应用程序是使用Java开发的,尽管一个特殊的编译器会将类文件转换为在Android设备上用于执行应用程序的专有的、基于寄存器的虚拟机。Android为编写移动应用程序定义了自己的API。在XMLVM的帮助下,可以将基于Java应用程序交叉编译为本机iPhone应用程序。
Android应用程序是用Java编写的,并利用了Android特定的API。XMLVM提供了一个用Java编写的兼容性库,它提供与Android相同的API,但只使用基于Java的Cocoa Touch API。在交叉编译过程中,应用程序和安卓兼容库都会从Java交叉编译到Objective-C,并与Cocoa Touch兼容库链接,以生成原生iPhone应用程序。
来自2008年关于为iPhone http://www.xmlvm.org/iphone/构建Java应用程序的演讲:
苹果的iPhone在用户和开发者中都产生了巨大的兴趣。与MacOS X一样,iPhone开发环境基于Objective-C作为开发语言,并基于Cocoa作为GUI库。iPhone软件开发工具包许可协议不允许开发虚拟机。使用XMLVM,我们通过交叉编译Java到iPhone来绕过这个问题。就像Java应用程序可以交叉编译为AJAX一样,XMLVM也可以用于将Java应用程序交叉编译为Objective-C。交叉编译也是通过模仿Objective-C中基于堆栈的机器来完成的。
发布于 2010-07-24 17:36:45
如果您专注于抽象系统交互之类的东西,并坚持使用语言的公共子集,那么您可能会构建几乎不需要修改即可从一种语言迁移到另一种语言的类。
C#确实有比Java语言更好的泛型实现,因为C#的泛型在运行时保留了强类型。
C#也有LINQ,据我所知在Java语言中还没有对应的LINQ。LINQ提供了一种类似SQL的查询功能,该功能内置于该语言中,并完全受.NET frameowrk的支持,它允许您查询对象集合,并以一种非常函数式语言的风格进行查询。一旦查询提供程序提供了转换为其他格式的对象模型,查询提供程序就可以扩展LINQ以使用其他数据格式,如XML和SQL。LINQ还使得多核工作的并行化变得非常容易。这是对语言能力的巨大扩展。
https://stackoverflow.com/questions/3326110
复制