今天在Mono举行的本地.Net活动中,MonoTouch的使用被“触及”作为iPhone开发的替代品。尽管有一些Mono堆栈的怪癖,但它在C#和.Net中非常舒服,它似乎是一个吸引人的选择。然而,由于MonoTouch价格为400美元,如果这是iPhone开发的方式,我会有点不知所措。
任何人都有使用MonoTouch和Objective-C开发的经验,如果是这样,使用MonoTouch进行开发比学习Objective-C更简单快捷,反过来又值400美元?
答案 0 :(得分:519)
答案 1 :(得分:62)
这篇文章中有很多传闻尚未尝试过MonoTouch 和 Objective-C。它似乎主要是从未尝试过MonoTouch的Objective-C开发人员。
我显然有偏见,但您可以查看MonoTouch社区的最新动态:
在那里,您将找到开发人员在Objective-C和C#中开发的一些文章。
答案 2 :(得分:39)
所以,我对之前similar question的回答是学习Objective-C。 (另外,不要忘记调试支持)
这可能会冒犯一些但是 老实说,如果你要做任何事情 认真发展,你应该学习 Objective-C的。不知道Objective-C 在iPhone开发中只会是一个 障碍。你将无法做到 了解很多例子;你必须 处理单声道的怪癖 如果你有工作知识 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,因为它们“更容易”吗?
答案 3 :(得分:27)
使用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完全支持所有这些功能,减少了所有手动内存管理,减少了执行相同任务所需的代码量,允许我重用我的程序集,以及让我的选择保持开放,以便能够转移到其他设备和平台。
答案 4 :(得分:19)
少打字。
只是我的经历。
答案 5 :(得分:17)
如果这是您将开发的唯一iPhone应用程序,并且您对开发Mac应用程序也没有兴趣,那么MonoTouch可能是值得的。
如果您认为自己将开发更多iPhone应用程序,或者想要进行一些Mac原生开发,那么学习Objective-C和相关框架可能是值得的。另外,如果你是喜欢学习新事物的程序员,那么这是一个有趣的新学习范例。
答案 6 :(得分:8)
就我个人而言,我认为你将有更好的时间学习Objective-C。
简而言之:
我发现像Unity和MonoTouch这样的项目应该“节省你的时间”,但最终你还是需要学习他们的领域特定语言,并且有时候必须采取侧面措施。所有这些可能只会让你学习你试图避免学习的语言(在日历时间)。最后,你没有节省任何时间,而且你与某些产品紧密相连。
编辑:我从来没有打算暗示任何关于.NET的负面信息我碰巧是它的忠实粉丝。我的观点是,仅仅因为你对这种古怪的objc括号表示法不熟悉而增加了更多层次的复杂性对我来说并没有多大意义。答案 7 :(得分:4)
添加其他人已经说过的内容(好吧!):我的感觉是你基本上将你需要担心的bug数量增加一倍,将MonoTouch中的bug添加到已经在iPhone OS中的那些。更新新操作系统版本将比平常更痛苦。哎呀,到处都是。
我能看到MonoTouch的唯一令人信服的案例是那些拥有大量C#程序员和C#代码的组织,他们必须利用iPhone。 (这种商店甚至不会以3500美元的价格眨眼。)
但对于任何从头开始的人来说,我真的不能认为这是值得或明智的。
答案 8 :(得分:4)
三个字:Linq to SQL
是的,非常值得$。
答案 9 :(得分:2)
我想添加一些东西,即使有一个可接受的答案 - 谁能说Apple不会拒绝那些有Mono Touch构建迹象的应用程序?
答案 10 :(得分:2)
我会把时间花在Objective-C上,主要是因为你可以从这样的网站获得所有帮助。 Objective-C的优势之一是你可以使用C和C ++代码,并且有很多项目都是经过充分测试。
另一件事是你的代码(首选语言)将由apple支持。例如,iOS 5.x取消了对MonoTouch等第三方解决方案的支持?那么你会告诉你的客户什么?
如果您还没有完全准备好转向Objective-C,那么使用像HTML5这样的平台无关解决方案可能会更好吗?
答案 11 :(得分: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.
答案 12 :(得分:1)
作为对C#和Objective-C都有经验的人,我会说对于大多数人来说,Xamarin非常物有所值。
C#是一种非常好的设计语言,C#API也设计得很好。当然,Cocoa Touch API(包括UIKit)也有很好的设计,但语言可以通过多种方式进行改进。在C#中编写时,与在Objective-C中编写相同的代码相比,您可能会更有效率。这是由于几个原因,但有些原因是:
C#有type inference。类型推断使编写代码更快,因为您不必“知道”赋值左侧的类型。它还使重构更容易,更安全。
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等...)。
与PhoneGap或Titanium等解决方案不同,Xamarin将为用户提供本机体验。
现在Objective-C比C#有一些优势,但在大多数情况下,用C#编写应用程序通常会减少开发时间和更清晰的代码,减少将同一个应用程序移植到其他平台的工作量。一个值得注意的例外可能是依赖OpenGL的高性能游戏。
答案 13 :(得分:-34)
MonoTouch库的成本完全不合时宜。你不应该将Mono用于你的iPhone应用程序的原因是它是一个拐杖。如果您无法学习本机工具,那么我没有理由相信您的产品值得下载。
编辑:4/14/2010使用MonoTouch编写的应用程序不符合iTunes Store的条件。这是应该的。 Apple在Mac上看到了很多浅薄的端口,使用像Qt这样的跨平台工具包,或Adobe自己部分重新实现System 7工具箱,而它的长短不一样就是它们还不够好。