MonoTouch和C#还是Objective C更适合iPhone应用开发?

11

您好,我是一名C#程序员。我计划开始为iPhone开发应用程序,但我不确定是否应该使用MonoTouch下的C#,还是直接使用iPhone操作系统的本地语言Objective C。

使用C#或Objective C编写iPhone应用程序有什么区别吗?

使用C#编写iPhone应用程序是否存在限制,或者它可以像Objective C一样开发iPhone应用程序?


2
我相信这个问题涵盖了这个问题的相同内容: https://dev59.com/L3I-5IYBdhLWcg3w-9wK - Brad Larson
它确实...但现在这个问题有了不同的背景,因为苹果的新条款禁止(技术上)跨编译应用程序。 - Armstrongest
4个回答

12

MonoTouch包装了iPhone SDK的大多数但并非全部功能。因此,是的,有些事情你还不能做(目前),但它们相对较少且不太常见。

许多.NET开发者发现使用MonoTouch可以更加高效(至少在最初阶段),因为他们可以利用自己现有的技能。另一方面,没有什么比使用本地语言更好的了,只需要花费一点时间。您将需要学习一些Objective-C,因为全球的大多数文档都在使用它(和/或C级别的CoreFoundation API)。Objective-C的动态性质起初可能会感到陌生,但是您一旦完全理解了它,可能会发现它非常自由。在我的职业生涯中使用过许多语言后,我认为Objective-C(以及Cocoa APIs)是其中最令人愉快的开发体验之一。


“他们选择允许通过MonoTouch应用程序”这个语句基于什么? - Dan Rosenstark
@yar,一些开发者报告说,在他们接受了新的开发者许可证后,他们基于MonoTouch的应用被接受了。目前还不清楚苹果是否选择不对MonoTouch执行ß3.3.1(我怀疑是这样),或者苹果只是还没有开始执行它。 - Barry Wark
@yar 我不知道苹果是否能够识别MonoTouch应用程序。我对MonoTouch AOT编译器并不熟悉,无法做出有用的猜测。 - Barry Wark
@Callum,那确实是普遍共识,但绝对不是苹果的观点。 - Barry Wark
@Barry,截至2010年9月9日,苹果公司已经放宽了开发工具的限制:http://www.apple.com/pr/library/2010/09/09statement.html。 - sivabudh
显示剩余2条评论

10
这是一个Monotouch开发者的答案,而不是一些人浏览博客的猜测。
如果你还没有购买Monotouch许可证,那么显然首选objective-C。如果你已经购买了许可证,那么在Monotouch中开发应用程序是有意义的,因为:
- 领域和业务逻辑可以很容易地移植到今年晚些时候发布的Windows Mobile 7应用程序中。 - Monodroid也很快就会推出,同样的API也可以很容易地移植到Java中。 - 控制器、视图和整个Monotouch系统(除了static void main)都可以非常容易地转换成objective-C。所有名称都相同,但格式是Pascal case。
至于应用程序是否被接受 - 到目前为止,苹果已经允许Monotouch应用程序通过审核。我并不是说他们不会突然说“不行!你必须使用objective-C”,但是对于他们来说,在像Stackoverflow这样的高知名度网站上禁止SO iPhone客户端将是一个不好的公关问题。
苹果在他们的演示中使用违反他们自己SDK的应用程序(Tap Tap Revolution就是其中之一),而App Store畅销游戏中每10个游戏中就有1个使用大量非objective-C的代码。
Monotouch是Cocoa和UIKit的直接映射。你需要有一台Mac才能使用编译器和IDE。据我所知,Flash没有这样的限制,并且它的UI对于强制使用常见的“widget”集合(如UINavigationController、UITabViewController、UIAlertView等)的方式要少得多。

为了保险起见,我建议使用Obj-C,这样你就不会浪费时间。 - Gary Willoughby
1
如果被拒绝了,UI 部分肯定是浪费时间。但是查询的部分可以稍后用于 Winmo 和 Android。 - Chris S

6
这是我的看法:如果你从未接触过Obj-C代码,那么需要一些时间来适应。加上SDK完全不同,你必须学习每一个新方法,如果你刻苦学习,成为平均水平的 Obj-C开发人员可能至少需要几个月的时间。
相反,使用MonoTouch并使用C#了解整个SDK。在几周内,您就会对所有类、界面构建器等感到非常熟悉。您将能够以与Obj-C相同的方式开发应用程序,但使用的是C#。演示版本允许您免费使用所有功能。
然后您可以决定做什么。根据Apple的整个问题如何处理,您可能决定继续使用MonoTouch,或者您可能决定学习Obj-C,并基本上使用已经获得的有关SDK的所有知识,这将使过渡更加容易。

2
有一些争议,关于苹果是否会允许这样做。表面上看起来是不行的:
在今天由苹果发布的 iPhone 开发者计划许可协议的新版本中(开发人员在下载 4.0 SDK beta 前必须同意),第 3.3.1 节现在写道:
3.3.1 - 应用程序只能按照 Apple 规定的方式使用文档化的 API,并且不能使用或调用任何私有 API。应用程序必须最初是用 Objective-C、C、C++ 或由 iPhone OS WebKit 引擎执行的 JavaScript 编写的,只有用 C、C++ 和 Objective-C 编写的代码才能编译并直接链接到文档化的 API(例如,通过中间翻译或兼容层或工具链接到文档化的 API 的应用程序是被禁止的)。
引自 monotouch 论坛

1
我同意。在苹果公司明确其对MonoTouch的立场之前,我认为在商业项目中使用它是一个严重的风险。 - Barry Wark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接