当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在MonoTouch和Objective-C之间做出决定?》经验,为你挑选了7个好方法。

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

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



1> Rory Blyth..:

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

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

以下是我如何确定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美元.

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


哇,罗里,谢谢你花时间详细回答我的问题.据我所知,你是唯一一个使用这两个选项的人,也就是我正在寻找答案的人.我肯定会从那里试一试.顺便说一下,我在最近的SO播客上听到了你,对吧?好东西.再次感谢!
感谢您的评论:)我对我见过的一些下意识的仇恨感到沮丧.这个问题一遍又一遍地回应着"你是一个白痴焚烧仪式系统先放松一下!!" 这是无益的和侮辱性的.MonoTouch有它的粗糙点,但那些家伙有天才的记录.MT已经快速发展,每天都更加美丽.我一直在说:给他们几个月.他们对功能很谨慎,但我认为*我们会看到*大*的东西.我喜欢Apple的堆栈,但我现在有另一个游乐场 - 这是一件好事,我很头晕:)
@Stephan - 说出"缺少"的可能是不对的 - 我可以用Cocoa完成工作.它更多的是关于API.使用.Net可以更轻松地处理字符串,日期,XML等.Dunno如果你熟悉.Net的做这些事情的方式,以及MonoTouch对它们的支持程度 - 如果你还没有调查它,你应该 - 只是为了检查它.我并不是说有些东西你不能用Cocoa做,但有很多东西用.Net更容易完成.解析更容易全面 - 日期数学更容易全面 - 等等.
还有一个问题是你自己的代码重用在带有MT的iPhone/iPad中.我们有一些加密代码和业务逻辑代码,运行在我们的服务器和桌面上,我们可以用MT重新编译并在我们的iOS客户端应用程序中使用.这对某些项目可能很重要.
另外值得考虑的事实是,尽管许可证价格为400美元,但还有维护订阅,您必须每年更新(明显的原因) - 250美元.这可能是一个合理的价格,但仍值得考虑.

2> miguel.de.ic..:

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

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

http://xamarin.com

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


@NSResponder - 您是否*使用*MonoTouch?这是一个v1.x版本,实际上是全新的,并且已经很棒了.在评论它之前尝试一下.有很大的变化(它的Interface Builder集成远远优于Xcode),并且几乎没有变化(例如,比较ObjC/Cocoa获取用户文档文件夹的方式与MT的相比).我仍然使用Apple的堆栈来做一些事情,但MT很漂亮且充满潜力.说真的 - 试试吧.或者看看Cocoa API是如何绑定的 - 你不必使用它 - 只是不要在没有*学习*的情况下丢弃工作.

3> BobbyShaftoe..:

所以,我对之前类似问题的回答是学习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,因为他们"更容易"这样做吗?



你可能无意中歪曲了MT.它根本不是 - 不是远程的 - 使用GTK来编写Win应用程序.MT的绑定非常忠实于CocoaTouch.他们实际上已经*改进了一些CT API约定.但是,您并不是在使用基于Windows窗体的CT抽象编写应用程序.使用MonoDevelop的MT与IB的结合比Xcode更好(如果你想要的话),你通常可以用一半或更少的代码完成同样的事情.二进制大小正在改进,工具(绑定生成器等)总是更好.MT应用程序*是*本机应用程序.
不是说我会把它用于一切.我喜欢ObjC并仍然使用它.而且,如果性能是一个问题,我可以更精细地控制正在发生的事情.但是......有时MT会更有意义,而且我认为这将使iPhone成为企业发展的可行*选择.扔在空中的岩石,你会打一个.Net开发.大多数公司没有内部的ObjC开发人员.对于企业工作,他们不应该这样做.使用Web服务和数据库,MT更容易*.你真的可以使用MT编写多种应用程序,只需要在ObjC中使用一半的代码.
最后(我可以继续,但我认为我正在提出要点),"打破"MonoTouch的变化可能会破坏ObjC应用程序.一旦您的应用程序在商店中,它就是*本机*iPhone应用程序(必须如此).调用最终没有什么不同 - 与使用Apple堆栈构建的应用程序相同的运行时.如果您的MT应用程序因运行时环境的更改而中断,那么使用ObjC构建的应用程序也会中断.MT团队一直在处理这些问题,快速发布更新和错误修复.MT的绑定与CT的关系非常接近,以至于任何真正麻烦的可能性都很低.Aight - 我现在闭嘴:)
举一个例子,而不是期望你自己接受我(显然)MT-fanboy的意见,我可以做一些事情(这只是一小部分优势):用一行创建一个属性; 获取对Document文件夹的引用而没有荒谬的数组搜索(一个应用程序有一个docs文件夹,总是在同一个地方 - 为什么所有额外的工作要"找到"它?); 使用Cocoa臭的.Net框架(NSDate,任何人?); 将商品技能用于企业应用; 使用适当的,现代的XML位(我喜欢它,当Cocoa默默地扼杀角色而只是*停止* - 没有崩溃 - 只是*停止*).

4> 小智..:

使用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完全支持所有这些功能,减少了所有手动内存管理,减少了执行相同任务所需的代码量,允许我重用我的程序集,以及让我的选择保持开放,以便能够转移到其他设备和平台.



5> Ian Vink..:

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

少打字.

只是我的经验.


"每月4个应用程序" - 数量更重要,如质量.MT就像麦当劳.但是你可以在XCode-Restaurant享用美食.
结果虽然不同,但是Rdio和iCircuit是史蒂夫乔布斯演示的MT应用程序.C#和MT摆脱了obj-C强迫你做的管道工作.

6> phoebus..:

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

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


如果这是你将要开发的唯一iPhone应用程序,99美元/年也不值得.

7> slf..:

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

简而言之:

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

你已经熟悉了很多*&(){}的"C风格"语法; 到处

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

您将以Apple的方式与iPhone进行交互,这意味着您可以直接从源获得好处,而不是通过某些过滤器.

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

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


首先,C#不是*"域特定语言" - 远非如此.这是一种商品技能.这是MonoTouch价值的一部分.可以认为(不公平和不准确)ObjC是一种DSL,因为大多数开发人员(外部金融和大学实验室和地下室)只会将其用于OS X或iPhone开发.但事实并非如此.像C#一样,它是一种多功能的语言,基本上存在让你专注于框架而不是语言本身(我认为我们同意).但请记住,您的*ObjC*代码将破坏Apple更新.这不是特定于MT的问题.
另外,作为MT的新功能,如果需要,可以更轻松地创建自己的绑定(MT 1.2).你并没有完全依赖MT窥视来完成所有工作(虽然他们*正在做那项工作),而且从来没有.它们具有创建绑定的简单方法.他们暴露了足够的ObjC运行时与MT框架,你没有锁定他们的做事方式.我重新实现了绑定,只是为了看看我是否更喜欢自己的方式.如果需要,您可以忽略MT框架并"手动"发送和接收消息,并且只需很少的代码.他们是聪明的人.相信他们:)
在某些情况下,MT甚至可以拯救你*因为*有这层抽象.Apple修改API?好吧,你的ObjC应用程序*和*你的(让我们假装它存在)等效的MT应用程序将会中断.MT人员可以发布一个权宜之计解决方案来修改MonoTouch API如何处理幕后调用.您的MT代码不必更改 - 您可以只针对权宜之计MT版本进行重建.是的:这是一个*脏*修复,很容易导致问题,但正确弃用权宜之计MT API会让开发人员有时间无缝地处理变更*和*为*real*修复购买时间.
我认为slf并不知道Monotouch只是C#(带GC)直接绑定到ObjC库+可选的.NET库.所以你仍然使用apple提供的API.但具有更整洁的语法和垃圾收集.
推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有