C#程序员开发iPhone的最简单方法是什么?

7

我应该使用Mono + c#吗?还是学习并使用objective c更好?谢谢。

7个回答

24

这可能会冒犯一些人,但老实说,如果你要进行任何严肃的开发,你应该学习Objective-C。在iPhone开发中不了解Objective-C只会成为一个障碍。你将无法理解许多示例;你必须处理Mono的怪癖,而如果你对Objective-C有工作知识,你可以从平台文档中获得更多的内容。

就我个人而言,我不理解那种认为增加所需信息量以支持使用Mono比使用平台的本地语言更好的立场。对我来说,这似乎有些适得其反。我认为,如果这是一个非常昂贵的建议(学习一门新语言),那么值得花些时间学习基本编程概念,以便于学习新语言变得相对便宜。


你的推理对我来说非常有道理。谢谢。 - Nestor
更让人无语的是,MonoTouch甚至没有完善的调试支持。这意味着你必须仅凭日志打印来引导自己学习所有这些新的内容。自从什么时候起,初学者写新代码的时间比调试还要多了呢? - PeyloW

9

我想知道苹果对于MonoTouch有何看法。未来是否可能存在任何问题? - Brian Kim
1
MonoTouch还不错,因为它不像iPhone上的其他一些语言那样使用解释器。它被编译成本地的Objective-C代码,所以最终两者是无法区分的。然而,你要依赖于Novell对MonoTouch的支持,而不是苹果的直接支持。 - Will Eddins

7

现在使用Monotouch会更加容易,但以后会更加困难。

例如,当新的种子出现并需要进行测试时,如果由于某些原因破坏了MonoTouch,会发生什么情况?

通过坚持使用Mono,每次查找框架资源时,您都必须在头脑中将其转换为如何与Mono一起使用。您的应用程序二进制文件会更大,在几个月后进入Objective-C后,您的开发时间不会快多少,并且其他应用程序开发人员将因为他们正在使用本地平台而具有更大的优势。

另一个考虑因素是,您想使用C#,因为您比Objective-C更熟悉这种语言。但iPhone的学习曲线绝大部分不是Objective-C,而是框架-您还必须使用C#调用它们。

对于任何平台,您应该使用直接表达该平台设计哲学的平台-在iPhone上,这是Objective-C。从相反的角度考虑,如果一个习惯于使用GTK编程的Linux开发人员想要编写Windows应用程序,您会认真建议他们不要使用C#,而要坚持使用GTK,因为这对他们来说更“容易”吗?


3
如果您想使用iPhone的所有API并且能够访问本地代码调试,您可能需要学习Objective C。然而,有一个名为Mono-Touch的工具,它可以让您使用C#开发iPhone应用程序,但目前缺少调试支持。此外,某些泛型和其他高端特性的使用也存在限制。这里是限制链接。还要注意的是,要使用Mono-Touch,您仍然需要安装Xcode和Mac环境以开发iPhone应用程序。如果您真的想将任何内容部署到实际设备上,那么无需说您需要加入苹果iPhone开发人员计划。

明白了。请问有没有类似于Visual Studio的IDE可以在Windows上开发Objective C呢? - Nestor
苹果公司免费提供XCode,但它只能在Mac电脑上运行。 - LBushkin
我相信这也是有意为之的。如果你想要开发iPhone应用,苹果希望你购买一台Mac电脑。如果你查看MonoTouch的下载页面,即使你想使用C#语言,它也要求你必须拥有一台Mac电脑。 - Will Eddins
哦糟糕...我不知道即使是为了使用MonoTouch,我也需要一台Mac。那我就麻烦了。 - Nestor
在探索类似问题以供自己使用时,是否有任何 Windows 操作系统的虚拟机或类似工具来模拟 MAC 以供开发使用? - Mark Schultheiss

1

这可能是一个有点主观的问题,但我的看法是你最好坚持使用C#。转换到Objective-C会增加你必须学习的新信息量,才能在你的环境中提高生产力。

即使坚持使用C#,你仍然需要...

  • 学习iPhone API
  • 了解使用iPhone开发的技巧

然而,使用C#也有一些缺点

  • 大多数iPhone示例将使用Objective-C。因为你不知道这种语言,所以将更难将它们应用于你的问题集
  • 在Mono中使用静态编译肯定会有一些小问题,你需要适应。

我的直觉是,与学习一门新语言的成本相比,这些缺点都是次要的。

编辑

我想澄清一下我对学习新语言的想法。我认为学习语言是有趣的,也是程序员生活中必不可少的一部分。你应该每年至少尝试一种新语言。今年我正在尝试F#。

唯一我不建议这个问题的原因是OP说“最简单的方法...”。学习一门新语言确实需要额外的时间和更多的努力,所以我认为坚持使用C#更容易。

2
但另一方面......学习新事物总是很有趣!但既然问题要求“简单”,那么你是对的。MonoTouch 可能是最好的选择,虽然价格更高($400 许可证费用),而且在处理问题时可能会有较少的社区支持。 - Will Eddins
这确实需要一些适应时间。我曾经使用过C、C++、Java和C#,但是对于一些概念仍然感到困惑(即使现在也不太熟悉)。尽管我遇到的问题更多地与XCode和一些设计师怪癖有关,而不是语言本身。 - Will Eddins
我在职业生涯中学习了许多编程语言。我不害怕新的语法。Objective-C背后是否有一种新的范例?还是它只是一种常规的面向对象语言? - Nestor
1
@Guard,@Nestor。请看我为什么建议不要学习一门新语言的澄清。我自己喜欢学习新语言,并认为作为程序员这非常重要。 - JaredPar
我必须强烈反对。为了使用MonoTouch编写除“Hello World”之外的应用程序,您仍然必须学习Cocoa Touch、Objective-C的内部工作原理以及MonoTouch的内部工作原理。因此,对于任何超出最基本用例的应用程序,您实际上需要学习比仅仅咬紧牙关花费几天时间学习Objective-C更多的东西。 - PeyloW
@Nestor:Objective-C是面向对象编程,但不完全像你从C++、Java和C#中所熟悉的那种。这些语言都是强类型的,而Objective-C是动态类型的,Cocoa Touch框架充分利用了这一点,这意味着你必须学习“动态面向对象编程”。在某种程度上,Objective-C更类似于Ruby。 - PeyloW

0

MonoTouch我认为是一个不错的选择,但请记住它仍处于初期阶段。我能够安装Mono开发工具并使MonoDevelop IDE正常运行,但目前这个IDE非常缓慢,几乎无法使用;至少在Mac OSX的Snow Leopard上运行如此。我进行了一些搜索,看起来这是一个已知的问题,但在MonoDevelop的最新版本中已经修复了。我认为Novell正在做正确的事情,但我也觉得在整个框架还处于早期阶段时,你将会与之斗争。

所以,归根结底,如果你想走C#/MonoTouch路线,请准备好投入大量的精力和时间去解决由于框架不稳定或不完整而产生的问题。我认为这对于任何新框架都是如此。


0
我发现这个播客很有趣。

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