首页 文章

如何在MonoTouch和Objective-C之间做出决定?

提问于
浏览
275

今天在Mono举行的本地.Net活动中参加 Session 后,MonoTouch的使用被“触及”作为iPhone开发的替代品 . 尽管有一些Mono堆栈的怪癖,但它在C#和.Net中非常舒服,它似乎是一个吸引人的选择 . 然而,由于MonoTouch的售价为400美元,如果这是iPhone开发的方式,我有点不知所措 .

任何人都有使用MonoTouch和Objective-C开发的经验,如果是这样,使用MonoTouch进行开发比学习Objective-C更简单快捷,反过来又值400美元?

14 回答

  • 39

    我最近看到了这个问题(以及它的变化) . 令我惊讶的是人们经常回应的频率,但很少有人回答 .

    我有我的偏好(我喜欢两个堆栈),但这是大多数“答案”开始出错的地方 . 它不应该是我想要的(或任何其他人想要的) .

    以下是我如何确定MonoTouch的 Value - 显然我不能客观,但我认为这是非常狂热的:

    • 这是为了娱乐还是商业?如果你想进入这个领域的咨询,你可以很快回来399美元 .

    • 你想从里到外学习平台,还是“只是”想要为它编写应用程序?

    • 你喜欢.Net足够使用不同的开发堆栈会为你带来乐趣吗?同样,我喜欢两个堆栈(Apple和Mono),但对我来说MonoTouch让体验变得更加有趣 . 我没有_1505574的工具,但这主要是因为我真的很喜欢这两种堆栈 . 我喜欢iPhone,我喜欢.Net . 在这种情况下,对我来说,MonoTouch是一个明智的选择 .

    • 你觉得和C一起工作感觉舒服吗?我不是指Objective-C,而是C - 它很重要,因为Objective-C就是C.它听听那些认为你是一个开发者的反对者,如果碰巧你不喜欢指针(或者C,等等 . ) . 我曾经带着IBM ROM BIOS Pocket Reference的副本走来走去,当我正在编写程序集并强迫我的计算机进入有趣的视频模式并为他们编写自己的字体渲染位和(无可置疑的是无用的)窗口系统时,我没有'认为QuickBasic开发人员是wusses . 我是一个QuickBasic开发者(除了其余的) . 永远不要屈服于书呆子大男子主义 . 如果你不喜欢指针,并且如果你想尽可能远离手动内存管理(而且,公平地说,它可以为它做任何事情 . )

    • 您想定位用户还是商家?它没有't matter much to me, but there are still people out there on Edge, and the fact is: you can create a far smaller download package if you use Apple'的堆栈 . 我've been playing around with MonoTouch, and I have a decent little app going that, once compressed, gets down to about 2.7 MB (when submitting your app for distribution, you zip it - when apps are downloaded from the store, they'重新拉链 - 所以当确定你的应用程序是否会在10MB OTA限制下进入时,首先拉下吸盘 - 你会对MonoTouch感到惊喜 . 但是,除了MT幸福之外,如果你正在考虑企业工作,那么对于你来说可能很重要的一半(例如)对你来说很重要,几MB会赢得't matter at all. And, just to be clear - I' m将要提交一个基于MT的应用程序商店很快,我没有任何问题的大小 . 不管你有什么关系,那么Apple的筹码就赢了 .

    • 做任何XML工作? MonoTouch的 . 期 .

    • 字符串操作?日期操纵?我们已经习惯了其他一百万个小东西.Net的所有东西 - 厨房 - 水槽框架? MonoTouch的 .

    • 网络服务? MonoTouch的 .

    • 从语法上讲,它们都有其优点 . 在你必须编写它时,Objective-C往往更加冗长 . 你_11505583_必须用ObjC写,但它是双向的 . 这个特定主题可以填写一本书 . 我更喜欢C#语法,但是在克服了我最初对Objective-C的这种异乎寻常的反应之后,我已经学会了相当多的享受 . 我在谈话中取笑它(对于习惯于C#/ Java /等的开发人员来说很奇怪),但事实是我心中有一个Objective-C形状的点让我开心 .

    • 您打算使用Interface Builder吗?因为,即使在这个早期版本中,我发现自己用IB构建我的UI然后在代码中使用它们的工作要少得多 . 感觉就像Objective-C / IB的做事方式缺少整个步骤,而且我认为,因为Objective-C / IB的做事方式缺少整个步骤 . 到目前为止,我还没有经过充分测试,但到目前为止,MonoTouch在这方面的优势在于您需要做多少工作 .

    • 你认为's fun to learn new languages and platforms? If so, the iPhone has a lot to offer, and Apple'的堆栈可能会让你走出你的舒适区 - 对于一些开发者来说,这很有趣(嗨 - 我'm one of those devs - I joke about it and give Apple a hard time, but I'通过Apple的工具学习iPhone开发很有趣 .

    有很多事情需要考虑 . Value 是如此抽象 . 如果我们谈论成本以及它是否值得,那么答案归结为我的第一个项目:如果这是为了生意,如果你能得到工作,你就可以立即赚钱 .

    那么......那就像我一样客观 . 这是您可能会问自己的简短列表,但这是一个起点 .

    就个人而言(让我们暂时放下客观性),我喜欢和使用两者 . 我很高兴我先学会了Apple堆栈 . 当我已经了解Apple的世界时,我更容易使用MonoTouch进行操作 . 正如其他人所说,你仍然会使用CocoaTouch - 它只是在一个.Net化的环境中 .

    但还有更多 . 没有使用过MonoTouch的人往往会停在那里 - “这是一个包装,等等等等” - 这不是MonoTouch .

    MonoTouch让您可以访问CocoaTouch提供的内容,同时还可以访问.Net所提供的内容(一部分),一些人感觉更舒服的IDE(我是其中之一),与Interface Builder更好的集成虽然你没有完全忘记内存管理,但你可以获得很好的回旋余地 .

    如果您不确定,请 grab Apple的堆栈(它是免费的),然后 grab MonoTouch eval堆栈(它是免费的) . 在你加入Apple的开发程序之前,两者都只能在模拟器上运行,但这足以帮助你弄清楚你是否非常喜欢一个到另一个,并且MonoTouch对你来说可能值399美元 .

    不要听狂热者 - 他们往往是那些没有使用他们所针对的技术的人:)

  • 2

    在这篇文章中,有很多传闻尚未尝试过MonoTouch和Objective-C . 它似乎主要是从未尝试过MonoTouch的Objective-C开发人员 .

    我显然有偏见,但您可以查看MonoTouch社区的用途:

    http://xamarin.com

    在那里你会发现一些开发人员在Objective-C和C#中开发的文章 .

  • 8

    所以,我对之前的similar question的回答是学习Objective-C . (另外,不要忘记调试支持)

    这可能会冒犯一些,但说实话,如果你要进行任何认真的开发,你应该学习Objective-C . 不了解iPhone开发中的Objective-C只会成为一个障碍 . 你将无法理解许多例子;你必须处理Mono的怪癖,而如果你有Objective-C的工作知识,你可以从平台文档中获得更多 . 就个人而言,我不理解这样的立场,即增加您需要的信息量,以支持在平台的母语上使用Mono . 这对我来说似乎有点适得其反 . 我认为如果这是一个非常昂贵的命题(学习一门新语言),那么花一些时间在基础编程概念上可能是值得的,因此学习新语言是一个相当便宜的命题 .

    Another user也写了这个:


    Monotouch现在更容易 . 但后来更难了 .

    例如,当新种子问世时你需要测试但是出于某种原因打破MonoTouch会发生什么?

    通过坚持使用Mono,每当您查找框架资源时,您必须在心理上将其转换为如何将它们与Mono一起使用 . 您的应用程序二进制文件会更大,在开发Objective-C几个月后,您的开发时间不会那么快,而其他应用程序开发人员将比您更具优势,因为他们使用的是本机平台 .

    另一个考虑因素是您希望使用C#,因为您比Objective-C更熟悉该语言 . 但是iPhone的绝大部分学习曲线都不是Objective-C,而是框架 - 您也必须使用C#调用它 .

    对于任何平台,您都应该使用直接表达该平台设计理念的平台 - 在iPhone上,即Objective-C . 从相反的角度考虑这个问题,如果一个习惯于在GTK编程的Linux开发人员想要编写Windows应用程序,你会认真地建议他们不要使用C#并坚持使用GTK,因为他们“更容易”这样做吗?


  • 4

    使用Mono不是拐杖 . 它为iPhone OS添加了许多东西 . LINQ,WCF,Silverlight应用程序,ASP.NET页面之间的可共享代码WPF应用程序,Windows窗体应用程序,还有Android版单声道,它也适用于Windows Mobile .

    所以,你可以花很多时间写Objective-C(你'll see from many studies where the exact same sample code in C# is significantly less to write than OC) and then DUPLICATE it all for other platforms. For me, I chose MonoTouch because the Cloud App I'm写的将有很多接口,iPhone只是其中之一 . 从 Cloud 到MonoTouch应用程序的WCF数据流非常简单 . 我有核心库,在各种平台之间共享,然后只需要为iPhone / WinMobile / Android / SilverLight / WPF / ASP.NET部署编写一个简单的表示层 . 在Objective-C中重新创建它将是一个 enormous 浪费时间的初始随着产品继续向前发展,开发和维护,因为所有功能都必须被复制而不是重复使用 .

    侮辱MonoTouch或暗示其用户需要拐杖的人缺乏将.NET框架放在触手可及的意义上的大图片,并且可能不理解逻辑与演示的正确分离方式可以跨平台和设备重用 .

    Objective-C很有趣,与许多常见语言有很大不同 . 我喜欢挑战并学习不同的方法......但这样做不会妨碍我的进步或创造不必要的重新编码 . 关于iPhone SDK框架有一些非常棒的东西,但是MonoTouch完全支持所有这些功能,减少了所有手动内存管理,减少了执行相同任务所需的代码量,允许我重用我的程序集,以及让我的选择保持开放,以便能够转移到其他设备和平台 .

  • 19

    我换了Monotouch让我写应用程序的速度至少快3-4倍(每月4个应用程序,而我在Obj C中的每月1个应用程序)

    少打字 .

    只是我的经验 .

  • 17

    如果这是您将开发的唯一iPhone应用程序,并且您对开发Mac应用程序也没有兴趣,那么MonoTouch可能是值得的 .

    如果您认为自己将开发更多iPhone应用程序,或者想要进行一些Mac原生开发,那么学习Objective-C和相关框架可能是值得的 . 另外,如果你是喜欢学习新事物的程序员,那么这是一个有趣的新学习范例 .

  • 518

    就个人而言,我认为你将有更好的时间来学习Objective-C .

    简而言之:

    • "Learning Objective-C"并不像你想象的那样令人生畏,你甚至可以在最初几周之后享受它

    • 您已熟悉"C style"语法,其中包含许多*&(){};到处

    • Apple在记录事情方面做得很好

    • 你'll be interacting with the iPhone the way Apple intended, which means you'将直接从源获得好处,而不是通过某些过滤器 .

    我发现像Unity和MonoTouch这样的项目应该“节省你的时间”,但最终你还是需要学习他们的领域特定语言,并且有时候必须采取侧面措施 . 所有这些可能只会让你学习你试图避免学习的语言(在日历时间) . 最后你没有节省任何时间,而且你与某些产品紧密相连 .

    编辑:我从来没有打算暗示任何关于.NET的负面信息我碰巧是它的忠实粉丝 . 我的观点是,仅仅因为你对这种古怪的objc括号表示法不熟悉而增加了更多层次的复杂性对我来说并没有多大意义 .

  • 27

    添加其他人已经说过的内容(好吧!):我的感觉是你基本上将你需要担心的bug数量增加一倍,将MonoTouch中的bug添加到已经在iPhone OS中的那些 . 更新新操作系统版本将比平常更痛苦 . 哎呀,到处都是 .

    我能看到MonoTouch唯一令人信服的案例是那些拥有大量C#程序员和C#代码的组织,他们必须利用iPhone . (那种商店甚至不会以3500美元的价格眨眼 . )

    但对于任何从头开始的人来说,我真的不能认为这是值得或明智的 .

  • 1

    三个字:Linq to SQL

    是的,值得花钱 .

  • 62

    我想添加一些东西,即使有一个公认的答案 - 谁能说Apple不会拒绝那些有Mono Touch构建迹象的应用程序?

  • -34

    我会把时间花在Objective-C上,主要是因为你可以从这样的网站获得所有帮助 . Objective-C的优点之一是你可以使用C和C代码,并且有很多项目是 well tested .

    另一件事是苹果支持你的代码(选择的语言) . 例如,iOS 5.x取消了对MonoTouch等第三方解决方案的支持?那你会告诉你的客户什么?

    如果你还没有完全准备好转向Objective-C,那么使用像HTML5这样的平台无关的解决方案可能更好吗?

  • 2

    我已经使用MonoTouch几个月了,我从ObjectiveC移植了我的半完成的应用程序,所以我可以在将来的某个时候支持Android .

    这是我的经历:

    坏位:

    • Xamarin Studio . 像我这样的独立开发者被迫使用Xamarin Studio . 它每周都在变得越来越好,开发人员在论坛上非常活跃地识别和修复错误,但它仍然很慢,经常挂起,有很多错误,调试也很慢 .

    • 建造时间 . 构建我的大型(链接)应用程序以在设备上进行调试可能需要几分钟,这与几乎立即部署的XCode相比 . 为模拟器(非链接)构建更快一点 .

    • MonoTouch问题 . 我遇到了由事件处理引起的内存泄漏问题,并且不得不提出一些非常难看的变通方法来防止泄漏,例如在进入和离开视图时附加和分离事件 . Xamarin开发人员正在积极研究这样的问题 .

    • 第三方图书馆 . 我花了很长时间来转换/绑定ObjectiveC库以在我的应用程序中使用,尽管使用Objective Sharpie等自动化软件会越来越好 .

    • 更大的二进制文件 . 这并没有真正打扰我,但我想我会提到它 . 如今IMO还有几个额外的Mb .

    好位:

    • 多平台 . 我的朋友很高兴从我的核心代码库创建我的应用程序的Android版本,我们正在并行开发并且正在提交到Dropbox上的远程Git存储库,它进展顺利 .

    • .Net . 在C#.Net中工作比Objective C IMO好得多 .

    • MonoTouch . 几乎iOS中的所有内容都在.Net中反映出来,并且让事情变得非常直接 .

    • Xamarin . 你可以看到这些人真正努力改善一切,使开发更顺畅,更容易 .

    我绝对推荐Xamarin进行跨平台开发,特别是如果你有资金使用与Visual Studio一起使用的商业版或企业版 .

    如果您只是创建一个永远不需要在另一个平台上使用的iPhone应用程序,并且您是独立开发人员,那么我现在就坚持使用XCode和Objective C.

  • 4

    作为对C#和Objective-C都有经验的人,我会说对于大多数人来说,Xamarin非常物有所值 .

    C#是一个非常好的设计语言,C#API也设计得很好 . 当然,Cocoa Touch API(包括UIKit)也有很好的设计,但语言可以通过多种方式进行改进 . 在C#中编写时,与在Objective-C中编写相同的代码相比,您可能会更有效率 . 这是由于几个原因,但有些原因是:

    • C#有type inference . 类型推断使编写代码更快,因为您不必在赋值的左侧使用"know"类型 . 它还使重构更容易,更安全 .

    • C#有generics,与同等的Objective-C代码相比,这将减少错误(尽管在Objective-C中有一些解决方法,在大多数情况下开发人员会避免它们) .

    • 最近Xamarin增加了对Async / Await的支持,这使得编写异步代码非常容易 .

    • You'll be able to reuse part of the code base on iOS, Android and Windows Phone.

    • MonoTouch主要以非常简单的方式实现CocoaTouch API . 例如:如果你有使用CocoaTouch的经验,你就会知道在MonoTouch中哪里可以找到控件的类(MonoTouch.UIKit包含UIButton,UIView,UINavigationController等等的类......,同样MonoTouch.Foundation获得了NSString的类, NSData等...) .

    • Xamarin将为用户提供本地体验,与PhoneGap或Titanium等解决方案不同 .

    现在Objective-C比C#有一些优势,但在大多数情况下,用C#编写应用程序通常会缩短开发时间,减少代码,减少将同一个应用程序移植到其他平台的工作量 . 一个值得注意的例外可能是依赖OpenGL的高性能游戏 .

  • 2

    MonoTouch库的成本完全不是重点 . 你不应该将Mono用于你的iPhone应用程序的原因是它是一个拐杖 . 如果你不能为学习而烦恼本机工具,那么我没有理由相信你的产品值得下载 .

    编辑:4/14/2010使用MonoTouch编写的应用程序不适用于iTunes Store . 这是应该的 . Apple在Mac上看到了很多浅薄的端口,使用像Qt这样的跨平台工具包,或Adobe自己部分重新实现System 7工具箱,而它的长短不一样就是它们还不够好 .

相关问题