今天在Mono举行的本地.Net活动中参加会议后,MonoTouch的使用被"触及"作为iPhone开发的替代品.尽管有一些Mono堆栈的怪癖,但它在C#和.Net中非常舒服,它似乎是一个吸引人的选择.然而,由于MonoTouch的售价为400美元,如果这是iPhone开发的方式,我有点不知所措.
任何人都有使用MonoTouch和Objective-C开发的经验,如果是这样,使用MonoTouch进行开发比学习Objective-C更简单快捷,反过来又值400美元?
我最近看到了这个问题(以及它的变化).让我感到惊讶的是人们经常回答的问题,但很少有人回答.
我有我的偏好(我喜欢两个堆栈),但这是大多数"答案"开始出错的地方.它不应该是我想要的(或任何其他人想要的).
以下是我如何确定MonoTouch的价值 - 显然我不能客观,但我认为这是非常狂热的:
这是为了娱乐还是商业?如果你想进入这个领域的咨询,你可以很快回来399美元.
你想从里到外学习这个平台,还是"只是"想要为它编写应用程序?
你喜欢.Net足够使用不同的开发堆栈会为你带来乐趣吗?同样,我喜欢两个堆栈(Apple和Mono),但对我来说MonoTouch让体验变得更加有趣.我没有停止使用Apple的工具,但这主要是因为我确实喜欢这两种堆栈.我喜欢iPhone,我喜欢.Net.在这种情况下,对我来说,MonoTouch是一个明智的选择.
你觉得和C一起工作感觉舒服吗?我不是指Objective-C,而是C - 它很重要,因为Objective-C 是 C.它是一个漂亮,花哨,友好的OO版本,但如果指针给你heebie-jeebies,MonoTouch是你的朋友.如果发生不喜欢指针(或C等)的话,不要听那些认为你是个开发者的反对者.我曾经带着IBM ROM BIOS Pocket Reference的副本走来走去,当我正在编写程序集并强迫我的计算机进入有趣的视频模式并为他们编写自己的字体渲染位和(无可置疑的是无用的)窗口系统时,我没有'认为QuickBasic开发人员是wusses.我是一个QuickBasic开发者(除了其余的).永远不要屈服于书呆子大男子主义.如果您不喜欢C,并且您不喜欢指针,并且您希望尽可能远离手动内存管理(并且,公平地说,它在ObjC中一点也不差),那么. .. MonoTouch.并且不要为此感到懊恼.
您想定位用户还是商家?这对我来说并不重要,但Edge上还有人,事实是:如果你使用Apple的堆栈,你可以创建一个小得多的下载包.我一直在玩MonoTouch,我有一个不错的小应用程序,一旦压缩,下降到大约2.7 MB(当提交你的应用程序进行分发时,你压缩它 - 当从商店下载应用程序时,它们'重新拉链 - 所以当确定你的应用程序是否会在10MB OTA限制下进入时,首先拉下吸盘 - 你会对MonoTouch感到惊喜.但是,除了MT的幸福之外,如果你的目标是最终用户,那么对你来说,半数甚至三倍(例如)可能对你很重要.如果您正在考虑企业工作,那么几MB就完全无关紧要了.而且,为了清楚起见 - 我将很快向商店提交一个基于MT的应用程序,而且我没有任何问题.根本不打扰我.但如果那件事与你有关,那么Apple的筹码就赢了.
做任何XML工作?MonoTouch的.期.
字符串操作?日期操纵?我们已经习惯了其他一百万个小东西.Net的所有东西 - 厨房 - 水槽框架?MonoTouch的.
网页服务?MonoTouch的.
从语法上讲,它们都有其优点.在你必须编写它时, Objective-C往往更加冗长.您将发现自己使用C#编写代码,而不必使用ObjC编写代码,但它有两种方式.这个特定主题可以填写一本书.我更喜欢C#语法,但是在克服了我最初对Objective-C的这种异乎寻常的反应之后,我已经学会了相当多的享受.我取笑它在谈判中位(这是为开发者怪异习惯使用C#/的Java /等等.谁),但事实是,我在我的心脏一个Objective-C形斑,这让我高兴.
您打算使用Interface Builder吗?因为,即使在这个早期版本中,我发现自己用IB构建我的UI然后在代码中使用它们的工作要少得多.感觉就像Objective-C/IB的做事方式缺少整个步骤,我很确定这是因为Objective-C/IB的做事方式缺少整个步骤.到目前为止,我认为我没有经过充分测试,但到目前为止,MonoTouch在这方面的优势在于您需要做多少工作.
你认为学习新语言和平台很有趣吗?如果是这样,iPhone可以提供很多东西,苹果的堆栈可能会让你走出你的舒适区 - 对于一些开发者来说,这很有趣(嗨 - 我是那些开发者之一 - 我开玩笑并给予它Apple很难,但通过Apple的工具学习iPhone开发有很多乐趣.
有很多事情需要考虑.价值是如此抽象.如果我们谈论成本以及它是否值得,那么答案归结为我的第一个项目:如果这是为了生意,如果你能得到工作,你就可以立即赚钱.
那么......那就像我一样客观.这是您可能会问自己的简短列表,但这是一个起点.
就个人而言(让我们暂时放下客观性),我喜欢和使用两者.我很高兴我先学会了Apple堆栈.当我已经了解Apple的世界时,我更容易使用MonoTouch进行操作.正如其他人所说,你仍然会使用CocoaTouch - 它只是在一个.Net化的环境中.
但还有更多.没有使用过MonoTouch的人往往会停在那里 - "这是一个包装,等等等等" - 这不是MonoTouch.
MonoTouch让您可以访问CocoaTouch提供的内容,同时还可以访问.Net所提供的内容(一部分),一些人感觉更舒服的IDE(我是其中之一),与Interface Builder更好的集成虽然你没有完全忘记内存管理,但你可以获得很好的回旋余地.
如果您不确定,请抓住Apple的堆栈(它是免费的),然后抓住MonoTouch eval堆栈(它是免费的).在你加入Apple的开发程序之前,两者都只能在模拟器上运行,但这足以帮助你弄清楚你是否非常喜欢一个到另一个,并且MonoTouch对你来说可能值399美元.
不要听狂热者 - 他们往往是那些没有使用他们所针对的技术的人:)
在这篇文章中,有很多传闻尚未尝试过MonoTouch 和 Objective-C.它似乎主要是从未尝试过MonoTouch的Objective-C开发人员.
我显然有偏见,但您可以查看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更熟悉该语言.但是iPhone的绝大部分学习曲线都不是Objective-C,而是框架 - 您也必须使用C#调用它.
对于任何平台,您都应该使用直接表达该平台设计理念的平台 - 在iPhone上,即Objective-C.从相反的角度考虑这个问题,如果一个习惯于在GTK编程的Linux开发人员想要编写Windows应用程序,你会认真地建议他们不要使用C#并坚持使用GTK,因为他们"更容易"这样做吗?
使用Mono不是拐杖.它为iPhone OS添加了许多东西.LINQ,WCF,Silverlight应用程序,ASP.NET页面,WPF应用程序,Windows窗体应用程序之间的可共享代码,还有适用于Android的单声道,它也适用于Windows Mobile.
因此,您可以花费大量时间编写Objective-C(您将从许多研究中看到C#中完全相同的示例代码写入的内容明显少于OC),然后将其全部重复用于其他平台.对我来说,我之所以选择MonoTouch,是因为我正在编写的Cloud App将拥有许多界面,iPhone只是其中之一.将WCF数据从云端流式传输到MonoTouch应用程序非常简单.我拥有在各种平台之间共享的核心库,然后只需要为iPhone/WinMobile/Android/SilverLight/WPF/ASP.NET部署编写一个简单的表示层.在Objective-C中重新创建它将对初始开发和维护都是一个巨大的浪费时间,因为产品继续向前发展,因为所有功能都必须被复制而不是重用.
侮辱MonoTouch或暗示其用户需要拐杖的人缺乏将.NET框架放在触手可及的意义上的大图片,并且可能不理解逻辑与演示的正确分离方式可以跨平台和设备重用.
Objective-C很有趣,与许多常见语言有很大不同.我喜欢挑战并学习不同的方法......但这样做不会妨碍我的进步或创造不必要的重新编码.关于iPhone SDK框架有一些非常棒的东西,但是MonoTouch完全支持所有这些功能,减少了所有手动内存管理,减少了执行相同任务所需的代码量,允许我重用我的程序集,以及让我的选择保持开放,以便能够转移到其他设备和平台.
我换了 Monotouch让我写应用程序的速度至少快3-4倍(每月4个应用程序,而我在Obj C中的每月1个应用程序)
少打字.
只是我的经验.
如果这是您将开发的唯一iPhone应用程序,并且您对开发Mac应用程序也没有兴趣,那么MonoTouch可能是值得的.
如果您认为自己将开发更多iPhone应用程序,或者想要进行一些Mac原生开发,那么学习Objective-C和相关框架可能是值得的.另外,如果你是喜欢学习新事物的程序员,那么这是一个有趣的新学习范例.
就个人而言,我认为你将有更好的时间来学习Objective-C.
简而言之:
"学习Objective-C"并不像你想象的那样令人生畏,你甚至可以在最初几周之后享受它
你已经熟悉了很多*&(){}的"C风格"语法; 到处
Apple在记录事情方面做得很好
您将以Apple的方式与iPhone进行交互,这意味着您可以直接从源获得好处,而不是通过某些过滤器.
我发现像Unity和MonoTouch这样的项目应该"节省你的时间",但最终你还是需要学习他们的领域特定语言,并且有时候必须采取侧面措施.所有这些可能只会让你学习你试图避免学习的语言(在日历时间).最后你没有节省任何时间,而且你与某些产品紧密相连.
编辑:我从来没有打算暗示任何关于.NET的负面信息我碰巧是它的忠实粉丝.我的观点是,仅仅因为你对这种古怪的objc括号表示法不熟悉而增加了更多层次的复杂性对我来说并没有多大意义.