CSharp - 如何确定MonoTouch和Objective-C之间 ?

  显示原文与译文双语对照的内容

今天坐在会议后在当地. NET mono事件,使用monotouch'触摸'像一个为iphone开发替代。 C# 和. NET 是非常舒服的,看起来像一个很有吸引力的选择,尽管有一些离奇的mono堆栈。 然而,由于MonoTouch成本 $400,如果这是iPhone开发的方式,我就有点torn了。

任何有经验的发展与monotouch objective-c, 和如果是正在开发更简单和更快的比学习 objective-c monotouch,反过来 $400价值?

时间:

我最近经常看到这个问题。 让我感到惊奇的是人们如何回应,但很少回答。

我有我的偏好设置( 我喜欢两个栈),但这是大多数"解答"开始出错的地方。 不应该是我想要的( 或者其他人想要什么) 。

下面是我如何确定MonoTouch的价值的方法- 我不能客观,显然,这是 zealotry-free:

  • 是为了娱乐还是商业? 如果你想在这里区域中进行咨询,你可以使你的$399非常迅速。

  • 你想学习平台 inside-out,还是想为它编写应用程序?

  • 你喜欢. NET,使用不同的开发堆栈会让你从中受益? 同样,我喜欢两个栈( 苹果和单声道),但对于我来说MonoTouch使得体验更加有趣。 我没有停止使用苹果的工具,但这主要是因为我真的享受这两个堆栈 。 我喜欢 iPhone,我喜欢. NET 。 在这种情况下,MonoTouch是一个 no-brainer 。

  • 你觉得使用舒服? 我不是指 objective-c,而是,因为 objective-c 是 。 它是一个漂亮,漂亮,友好的OO版本,但是如果指针给你 heebie-jeebies,MonoTouch是你的朋友。 ,不听naysayers他们认为你是一个开发wuss如果恰巧你不像指针( 或者C,等等 ) 。 我曾经走在ibm罗bios袖珍参考的一个副本,当我正在写汇编,迫使我的电脑到有趣的视频模式和写自己的字体渲染比特和( 无可否认的垃圾) 窗口系统,我没有想到 wusses QuickBasic开发者。 我 QuickBasic dev ( 除了其余的) 。 从不放弃书呆子 machismo 。 如果你不喜欢( 公平地说,在ObjC中这一点也不错),并且你不喜欢指针,如果你想尽可能远离手动内存管理,那么- 。 MonoTouch,不要为它做任何事情。

  • 你希望目标用户或者企业? 这对我来说并不重要,但仍然有人在边缘,事实是: 如果你使用苹果的堆栈,你可以创建一个更小的下载包。 我一直在玩 MonoTouch,我有一个不错的小程序,一旦压缩,就会降到 2.7 MB 。 但是,除了太幸福,半个梅格 vs 近三( 例如) 可能对你重要的东西,如果你的目标是最终用户。 如果你正在考虑企业工作,那么根本就无关紧要了。 而且,为了弄清楚- 我将把一个MT-based应用提交到商店 soonishly,而且我没有任何问题。 根本不打扰我。 但如果这是担心,然后堆苹果赢了这一个。

  • 做任何XML工作MonoTouch 。 句号。

  • 字符串操纵日期操纵我们已经习惯了. Net's everything-AND-the-kitchen-sink框架的其他小事情? MonoTouch 。

  • Web服务MonoTouch 。

  • 在句法上,两者都有各自的优势。 objective-c 往往是更详细的,你必须写它。 你会发现自己用 C# 编写代码,你不必用ObjC编写代码,但这两种方式都是一样的。 这个特定的主题可以填充一本书。 我更喜欢 C# 语法,但原谅我最初的objective-c this-is-otherworldlyReact后,我已经学会享受它。 我取笑这一点进行谈判(它奇怪的开发者习惯于 C#/Java/etc.), 但事实是,我有一个 objective-c 形状的位置在我的心里,让我快乐。

  • 你打算使用接口生成器? 因为,即使在这个早期版本中,我发现我自己做的工作远远少于用IB构建我的ui,然后在代码中使用它们。 我觉得 objective-c/ib方法中缺少整个步骤,我非常确信这是因为 objective-c/ib方法在执行事情时缺少整个步骤。 到目前为止,我不认为我有足够的测试,但目前为止 monotouch获胜者在这里是更少的工作要做。

  • 你认为学习新语言和平台很有趣? 如果是这样,iphone有很多,和堆苹果可能会让你从你的comfort-zone——对于一些开发者,是有趣 ( 嗨——我是其中的一个开发者,我开玩笑,给苹果很难,但是我有很多乐趣学习iphone开发通过工具)的苹果。

有这么多事情要考虑。 价值是如此抽象。如果我们谈论的是成本,它是否值得,答案是我的第一个项目项目: 如果这是为了生意,如果你能得到工作,你就可以直接赚钱了。

所以。。这就像我可以做的一样。 这是你可能会问的简短的List,但它是一个起点。

个人( 让我们暂时去掉客观性),我喜欢和使用两者。 我很高兴我首先学会了苹果的堆栈。 当我已经熟悉了苹果的世界时,我更容易使用 MonoTouch 。 就像其他人所说,你仍然在使用 CocoaTouch - 它只是在一个. Net-ized 环境中。

但不止如此。 没有使用MonoTouch的人往往会停下来-"这是一个包装器"- 这不是 MonoTouch 。

monotouch允许你访问CocoaTouch所提供,你也可以访问什么( 子集). NET, ide ( 我是其中之一) 有些人感到更舒适,更好的整合与界面构建器,虽然你不去完全忘记memory-management,你会得到一个漂亮的回旋余地。

如果你不确定,抓取苹果( 是免费的)的堆栈,并获取 MonoTouch eval堆栈( 是免费的) 。 直到你加入苹果的开发计划,都只会对模拟器运行,但这足以帮助你找出如果你非常喜欢,和可能的monotouch是否,你,值得 $399.

并且不听zealots——他们往往是那些没有使用技术他们反对:)

这篇文章里有很多的传闻,开发者们从未尝试过 MonoTouch 和 objective-c 。 似乎大部分是 objective-c 开发者从未尝试 MonoTouch 。

我显然有偏见,但是你可以查看MonoTouch社区的内容:

http://xamarin.com

在那里你会发现一些开发者在 objective-c 和 C# 中开发的文章。

所以,我的答案之前是学习 objective-c 类似的问题。 ( 也不要忘记调试支持)

这可能会冒犯一些人,但老实说,如果你要做任何重大的开发,你应该学习 objective-c 。 在iPhone开发中不知道 objective-c 只是一个障碍。 你将无法理解许多例子;你必须处理Mono的古怪,而如果你有 objective-c的工作知识,你就可以从平台文档中得到更多的信息。

就个人而言,我不理解在平台语言的本机上使用Mono来增加信息数量的位置。 对我来说似乎有点适得其反。 我认为如果这是一个非常昂贵的命题( 学习一种新语言),那么花一些时间在基本编程概念上是值得的,这样学习新的语言是一个相当便宜的命题。

另一个用户 。也写了如下内容:


Monotouch对你来说更容易了。 但以后更难。

例如当新种子出来时,你需要测试,但由于某种原因中断 MonoTouch?

通过坚持mono,任何时候你查找资源框架精神转化为你打算如何使用mono。 应用程序二进制文件将会更大,你的开发时间,几个月后更快进入 objective-c, 和其他应用程序开发者将有更多的优势,因为他们是使用本机平台。

另一个考虑是你要使用 C#,因为你对语言的理解比 objective-c 熟悉。 但是大部分的学习曲线都不是 objective-c,它是框架,你必须用 C# 来调用它。

对于任何平台,你都应该使用直接表达平台设计理念的平台- 在iPhone上,即 objective-c 。 从相反的角度考虑这一点,如果一个Linux开发人员习惯于编写 Windows 应用程序,你会强烈建议他们不要使用 C#,你强烈建议他们不要使用,因为它是"轻松"?


使用Mono不是一个拐杖。 它在iPhone操作系统中有很多东西。 LINQ,WCF,在Silverlight应用程序之间共享代码,一个 ASP.NET 页面,一个WPF应用程序,一个 Windows 窗体应用,并且还可以为 Windows Mobile 工作。

所以,你可以花很多时间写 objective-c ( 从许多研究中你会看到,在 C# 中,完全相同的样例代码的编写比 OC ),然后把它复制给其他平台。 对于我来说,我选择MonoTouch是因为我正在编写的云应用将有很多接口,iPhone只是其中之一。 将WCF数据从云传输到MonoTouch应用程序非常简单。 我拥有在各种平台之间共享的核心库,然后只需要为 iPhone/WinMobile/Android/SilverLight/WPF/ASP.NET 部署编写一个简单的表示层。 重建在 objective-c 将是一个巨大浪费时间首次开发和维护产品继续前进,因为所有功能必须被复制而不是重用。

人侮辱monotouch或insinuating,用户需要一个拐杖的缺乏大局. NET 框架在你的指尖,也许不了解正确的逻辑与表示分离的方式完成跨平台和设备可以重用。

objective-c 很有趣,而且与许多常用语言非常不同。 我喜欢挑战和学习不同的方法。 但这样做不妨碍我的进步或者创建不必要的re-coding 。 有一些真正伟大的事情iphonesdk框架,但所有的伟大与monotouch完全支持,排除所有手动内存管理,减少了所需的代码来执行相同的任务,允许我重用组件,并保持开放的心态能够移动到其他设备和平台。

我换了。monotouch让我们写应用程序至少 3 -4倍(4 应用每月比我老每月 1 Obj c)

更少的输入。

只是我的经验。

如果这是你唯一会iphone应用程序的发展,你也没有兴趣开发mac应用程序,然后monotouch可能是值得的成本。

如果你认为你会发展更多的iphone应用程序,或者会想做一些mac本地开发,这可能是值得学习 objective-c 和相关的框架。 另外,如果你是学习新事物的程序员类型,这是一个有趣的新范例。

我个人认为你会有更好的时间学习 objective-c 。

简而言之:

  • "学习 objective-c 不是一件令人畏惧的事情,你可能会觉得,你甚至可以在前几周后享受它
  • 你已经熟悉了"c 风格"语法和许多 *&(){};
  • 苹果在文档记录方面做了一个很好的工作
  • 你将以苹果的方式与iPhone交互,这意味着你将直接从源代码中获益,而不是通过一些过滤器。

我发现项目统一和monotouch"节省时间"但最终你需要学习他们的领域特定语言,有时不得不side-step事情。 你可能只需要学习你试图避免学习( 在日历时间中)的语言。 最后你没有保存任何时间,你与一些产品紧密耦合。

编辑:我无意暗示任何关于. NET的东西我碰巧是它的一个大粉丝。 我的观点是,增加更多的复杂性,仅仅是因为你还不适应古怪的objc括号符号,这对我来说并没有什么意义。

添加到其他人已经说过的( 那名那名): ! 我的感觉是你基本上把你需要担心的Bug的数量增加一倍,在MonoTouch中添加那些已经在iPhone操作系统中的。 新操作系统版本更新比普通操作系统更痛苦。 讨厌,到处都是。

monotouch的唯一引人注目的情况下我可以看到组织有很多很多 C# 程序员和 C# 代码周围必须利用iphone。 ( 在 $3500的商店里不会闪烁)

但对于那些从scratch开始的人来说,我真的无法认为它是值得的或者明智的。

三个词:Linq到 SQL

是的,$. 是值得

一些我想添加的东西,即使有一个接受的答案- 谁说苹果不会拒绝那些有Mono触摸的应用?

...