如果Monotouch可用,为什么要使用Xcode?

9

如果有MonoTouch可用,为什么我们还要使用Mac环境(SDK、Xcode+Interface Builder)?

MonoTouch相对于Xcode有哪些劣势?


7
因为你不懂C#。因为你喜欢Objective-C。因为你使用的是Mac环境。因为这是你想要的。选择有什么问题吗? - R. Martinho Fernandes
1
我有我的论文演讲,所以可能会出现这样的问题:既然Monotouch可用,为什么选择Mac环境。 - Pooja
4
即使使用MonoTouch,仍需要Mac环境。 - Felipe Cypriano
签署软件包仍需要 Xcode 和 Mac。 - Adeel
那么,花了钱成为苹果开发者后,又要支付额外的费用才能使用Monotouch,这怎么样? - Peter M
显示剩余3条评论
5个回答

34

我总是喜欢使用与我正在开发平台最为哲学相近的语言。

也就是说,整个平台所构建的框架都是用Objective-C编写的。因此,如果你自己在一段时间内使用Objective-C,就能够理解为什么事情被构建成这个样子,并且还可以预测可能存在的调用或行为。

就像我不会用除Silverlight以外的任何东西开发Windows Phone 7一样,我也不会用除Objective-C以外的任何东西来编写iPhone,以便充分利用平台的优势。新语言?那是一种好处,因为人们应该时不时地学习新语言。而且使用你已经了解的语言并不能为你节省太多时间,因为你大部分的时间将花费在学习框架上(而MonoTouch可以让你调用这些框架)。


2
抱歉,但我不同意。虽然在最理想的意识形态语言下工作是有道理的,但我认为 Objective C 的特性使得这个案例不那么令人信服。或者换句话说,C# 是一门太强大的语言,不能错过这个机会。 - Dmitri Nesteruk
如果您使用现代的Objective-C,那么C#似乎不会更强大。缺少ARC和直接处理集合对象的语法(这在许多API调用中都需要)是一个很大的不足,就我而言。 - Kendall Helmstetter Gelner
两个词: "LINQ" 和 "Lambdas"。/结束。 - The Muffin Man
两个词:NSPredicate和Blocks。在批评之前,请了解您的语言。最后一个词:ARC。 - Kendall Helmstetter Gelner
LINQ和Lambda的语法更加简洁。顺便说一下,我刚开始使用Objective-C,但我认为任何人都会同意它的语法并不是很好。除此之外,我认为它非常棒。 - The Muffin Man
我不同意;我认为Objective-C的语法很好。你已经习惯了冗长。重要的是,如果需要,功能是存在的,另外需要注意的是块使用现在已经广泛应用于标准框架中,因此它不仅仅是为了使您自己的代码更好而已。 - Kendall Helmstetter Gelner

10

我觉得这个问题也需要MT派回答。

为什么要吃鱼,如果可以吃肉呢?为什么说德语,如果英语已经被理解了呢?为什么看CNN,如果有FOX呢?为什么投共和党的票,如果有民主党呢?为什么……等等。

这是你的选择!如果你长时间使用C#并想在iOS上快速获得结果,请选择MonoTouch。特别是如果你有一系列可重用的API或方法,MT是最好的选择。如果你想学习一门新语言(ObjC),那就去学吧。即使你最终使用MT,了解ObjC也非常重要,因为它有助于你了解为什么事情会按照这样的方式工作。


请勿在帖子中添加标语和签名。有关StackExchange政策的更多信息,请参见http://meta.stackexchange.com/a/5038/171789。 - Matt Fenwick

9

你好,这是我的个人观点:

我也在.NET世界里待了一段时间,当iPhone推出创建本地应用程序的功能时,它吸引了我所有的注意力,我真的试图学习Objc,我拿了两本书开始尝试了一个月,然后放弃了iPhone编程,因为你必须做许多比.NET多得多的事情,例如GC。

当Miguel de Icaza推出MonoTouch时,我试了试,我意识到我之前完成的大部分代码都是完全可用的(我总是试图将ui代码与业务代码分离),这确实是.NET在iPhone上的重点,将大部分已经完成的业务逻辑带到设备上。

此外,在objc上,您不会找到任何类似于LINQ或var关键字的东西,使用MonoTouch消耗Web服务只需点击几下等等。

如果您想针对Android平台进行目标设置,则还有MonoDroid(monodroid.net),该稳定版将在今年晚些时候发布,您现在可以在beta状态下尝试。另外,如果您想针对Mac OSX进行目标设置,还有MonoMac。因此,您可以在所有这3个平台(以及所有支持mono/.NET的平台)之间轻松共享类库,更不用说它也将在Windows上工作,反之亦然(如果可能的话)(还有别忘了WP7)。

您唯一需要担心的是UI,但大部分业务逻辑应该可以工作。这里是MonoTouch支持的.NET程序集的完整列表http://monotouch.net/Documentation/Assemblies,而且MonoTouch向所有CocoaTouch API公开了C#/CIL绑定。

此外,MonoTouch团队的支持非常棒,您只需进入IRC并提出问题,它将立即得到回答,邮件列表也是如此:)

我真的很喜欢MonoTouch,我知道没有语言适用于所有任务,Objective-C也不例外。


2

每个示例、教程和文档都将用Objective-C编写,而Mono只是在幕后调用Objective-C代码。如果你真的觉得值得用C#进行心理翻译,并在你的代码中添加一个额外的层次,请随意尝试。


MonoTouch不仅仅是对底层Objective-C平台的绑定。它扩展了.NET类型系统和调度系统,以更好地融合C#和Objective-C。就像P/Invoke是在Windows和Linux上调用本机库的有用工具,或者如何使用IJW支持在Windows上进行COM互操作一样,MonoTouch扩展了运行时以支持将C#对象绑定到Objective-C对象。http://monotouch.net/Documentation/API_Design - dalexsoto
1
当然可以,但你仍然需要使用底层平台API,这些API是ObjC编写的。 - Catfish_Man

0
作为一名C#开发人员,我发现Objective-C非常难以掌握。花了大约两个月的时间和两个优秀的资源才达到这个阶段。
拿出你的Visa卡,你需要花费总共54美元。
1. 免费的斯坦福“为iOS开发应用程序”讲座。 纯粹的才华横溢,它使学习Objective-C变得非常清晰。 http://itunes.apple.com/us/itunes-u/developing-apps-for-ios-sd/id395631522 2. iOS学徒系列。 这是你需要支付54美元的地方。它逐步教你如何在Objective-C中编程,而且你构建的应用程序实际上相当令人印象深刻。第1部分(4部分中的第1部分)完全免费,所以你可以在付款之前试试看。 http://www.raywenderlich.com/store/ios-apprentice

我还没有找到任何一本iOS书籍能够像这两个资源一样清晰友好。

最后,不要购买任何不明确说明是针对iOS5和XCode 4的书籍。这个最新版本的XCode与之前版本有太大的不同,使它们变得无用。

声明:我不在本帖提到的任何资源公司工作!


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