代码之家  ›  专栏  ›  技术社区  ›  jamesaharvey

如何在单触式和目标C之间做出决定?

  •  275
  • jamesaharvey  · 技术社区  · 15 年前

    今天,在一次当地的.NET活动上,MonoTouch的使用经历了一段时间后,作为iPhone开发的一种替代方法,被“触动”。在C和.NET中非常舒适,尽管单声道堆栈有一些特殊之处,但它似乎是一个吸引人的选择。然而,由于MonoTouch的价格是400美元,如果这是iPhone开发的一种方式,我会有点苦恼。

    任何人都有开发MonoTouch和Objective-C的经验,如果有,那么开发MonoTouch比学习Objective-C更简单、更快,反过来价值400美元?

    14 回复  |  直到 10 年前
        1
  •  519
  •   Rory Blyth    14 年前

    我最近经常看到这个问题(及其变化)。让我吃惊的是人们的反应频率是多少,但很少 回答 .

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

    以下是我如何确定单触式的价值——显然,我不能客观,但我认为这是相当狂热的自由:

    • 这是为了娱乐还是为了生意?如果你想在这方面进行咨询,你可以很快地赚回399美元。

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

    • 您是否足够喜欢.NET,使用不同的dev堆栈可以让您从中获得乐趣?同样,我喜欢两个堆栈(苹果和Mono),但对我来说,单触式使体验更加有趣。我没有停止使用苹果的工具,但这主要是因为我 真的很喜欢两层楼 . 我喜欢iphone,我喜欢.net。在这种情况下,对我来说,单触式是一个很简单的方法。

    • 你觉得和C一起工作舒服吗?我不是说客观-C,但C-重要的是客观-C 这是一个不错的,花哨的,友好的OO版本,但如果指针给你的希比吉比,单触是你的朋友。不要听那些认为你是一个开发人员的反对者,如果发生这种情况,你 不要 像指针(或C等)。我曾经带着一份IBMrombios的袖珍参考文件到处走,当我写程序集,强迫我的计算机进入有趣的视频模式,为它们写自己的字体渲染位,以及(当然是垃圾)窗口系统时,我不认为QuickBasic开发人员是懦夫。我 一个QuickBasic开发人员(除了其他开发人员)。永远不要屈服于书呆子的男子气概。如果你不喜欢C,如果你不喜欢指针,如果你想尽可能远离手动内存管理(公平地说,在objc中这一点也不坏),那么……单触式。别胡扯了。

    • 您想以用户或企业为目标吗?对我来说没什么大不了的,但是仍然有人在边缘,事实是:如果你使用苹果的堆栈,你可以创建一个更小的下载包。我一直在玩MonoTouch,我有一个很不错的小应用程序,一旦压缩,可以降到大约2.7 MB(当提交应用程序进行分发时,你压缩它-当应用程序从商店下载时,它们被压缩-所以当计算出你的应用程序是否会低于10MB的OTA限制时,首先压缩吸盘-你需要我会为一次触摸而感到惊喜。但是,撇开幸福感不谈,半个兆对近三个兆(例如),如果你的目标是最终用户,这可能对你很重要。如果你想做企业级的工作,那么几MB根本不重要。而且,只是说清楚-我会尽快向商店提交一个基于mt的应用程序,我对它的大小没有任何问题。一点也不打扰我。但如果这是一个值得关注的问题 ,那么苹果的堆栈就赢了这一个。

    • 做任何XML工作?MonoTouch。时期。

    • 字符串操作?日期操纵?我们已经习惯了.NET的所有东西和厨房水槽框架吗?MonoTouch。

    • Web服务?MonoTouch。

    • 从句法上讲,它们都有各自的优势。目标C往往更详细 你要写在哪里 .你会发现自己用C来编写代码,你不必用objc来编写代码,但它是双向的。这个特定的主题可以填满一本书。我更喜欢C句法,但在克服了我的初始阶段之后,这是对客观C的超自然反应,我已经学会了享受它。我在谈话中有点取笑它 对于那些习惯于C/Java/等等的DVS来说很奇怪,但事实是我心中有一个客观的C形点让我快乐。

    • 您计划使用Interface Builder吗?因为,即使在这个早期版本中,我发现自己用ib构建uis并在代码中使用它们的工作也少得多。感觉像是客观的C/IB做事方式缺少了整个步骤,我很确定这是因为客观的C/IB做事方式缺少了整个步骤。到目前为止,我认为我还没有进行充分的测试,但是 到目前为止 在这里,一触式是你少做多少工作的赢家。

    • 你认为学习新的语言和平台很有趣吗?如果是这样的话,iPhone有很多东西可以提供,苹果的产品很可能会让你脱离舒适区——对于某些开发者来说,这是 乐趣 (嗨-我是其中一个开发者-我开玩笑,给苹果一段艰难的时光,但是我通过苹果的工具学习iPhone的开发非常有趣)。

    有很多事情要考虑。价值是如此抽象。如果我们谈论的是成本和它是否值得,我的第一个问题就是:如果这是为了生意,如果你能得到工作,你会马上赚回你的钱。

    所以…这是我能做到的最客观的一点。这是一个简短的清单,列出了你可能会问自己的问题,但这是一个起点。

    就我个人而言(让我们暂时抛开客观性),我喜欢并使用两者。我很高兴我先学会了苹果。当我已经知道如何在苹果的世界里运行的时候,我更容易用单触式启动和运行。正如其他人所说,您仍将使用cocoatouch——它将处于.NET环境中。

    但不止这些。没有使用过单触式的人往往会停在那里——“这是一个包装纸,废话”,这不是单触式。

    MonoTouch让你可以访问CocoAtouch必须提供的内容,同时也让你可以访问.NET必须提供的内容(一个子集),一些人觉得更舒服的IDE(我是其中之一),更好地与界面构建器集成,尽管你不能完全忘记内存管理,但是你有很好的回旋余地。

    如果你不确定,抓住苹果的堆栈(它是免费的),然后抓住MonoTouchEval堆栈(它是免费的)。在你加入苹果的dev程序之前,这两个程序都只能在模拟器上运行,但这足以帮助你弄清楚你是不是非常喜欢一个而不是另一个,以及可能的是,对于你来说,单点触摸是否值399美元。

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

        2
  •  62
  •   rajeemcariazo    11 年前

    在这篇文章中有很多来自开发人员的传闻,他们没有尝试过单点触摸。 Objective-C。似乎主要是Objective-C开发人员从未尝试过单触。

    我显然有偏见,但你可以看看MonoTouch社区在以下方面做了什么:

    http://xamarin.com

    在这里,您将看到来自开发人员的几篇文章,它们都是在Objective-C和C中开发的。

        3
  •  39
  •   Community Egal    7 年前

    所以,我以前的回答 similar question 是学习Objective-C(还有,不要忘记调试支持)

    这可能会冒犯一些人,但 老实说,如果你要做什么 认真发展,你应该学会 目标C不知道目标C 在iPhone开发中, 阻碍。你将无法 了解许多例子;你必须 处理Mono的怪癖, 如果你知道 目标C你可以得到更多 不在平台文档中。

    就我个人而言,我不明白 表示增加 您需要的信息量 喜欢使用单声道而不是 平台的母语。似乎 对我有点适得其反。我 想想这是不是很贵 命题(学习新语言) 那就值得花钱了 关于基础编程的一些时间 学习新概念 语言是相当便宜的 命题。

    Another user 还写了:


    单触式现在对你来说更容易。但以后更难。

    例如,当新种子出来的时候,你需要测试,但是由于某种原因打破了一触式?

    通过坚持Mono,每当你在寻找框架的资源时,你都必须从精神上把它们转换成如何与Mono一起使用。你的应用程序二进制文件会更大,在进入Objective-C的几个月后,你的开发时间不会快得多,其他应用程序开发人员会比你有更多的优势,因为他们使用的是本地平台。

    另一个考虑是,你希望使用C,因为你比Objective-C更熟悉该语言。但iPhone的大部分学习曲线不是Objective-C,而是框架——你也必须使用C。

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


        4
  •  27
  •   Paul    15 年前

    使用Mono不是拐杖。它为iPhone操作系统增加了许多功能。linq、wcf、Silverlight应用程序、ASP.NET页面、wpf应用程序、Windows窗体应用程序之间的可共享代码,还有用于Android的Mono,它也适用于Windows Mobile。

    因此,您可以花费大量时间编写Objective-C(从许多研究中可以看出,C中完全相同的样本代码编写起来要比OC少得多),然后在其他平台上复制它们。对于我来说,我选择MonoTouch是因为我正在编写的云应用程序将有许多接口,iPhone只是其中之一。将WCF数据从云传输到MonoTouch应用程序非常简单。我的核心库在各种平台之间共享,然后只需要为iPhone/WinMobile/Android/Silverlight/WPF/ASP.NET部署编写一个简单的表示层。在Objective-C中重新创建它将是 巨大的 由于所有功能都必须被复制而不是重用,所以在产品继续向前发展的过程中,对初始开发和维护都浪费时间。

    那些侮辱单触式或暗示其用户需要拐杖的人缺乏一个大致的概念,即将.NET框架放在指尖上意味着什么,并且可能不理解逻辑与表示的正确分离,这种分离可以跨平台和设备重用。

    Objective-C非常有趣,与许多常用语言非常不同。我喜欢挑战和学习不同的方法…但当这样做阻碍了我的进展或造成不必要的重新编码时,我不会这样做。iPhone SDK框架确实有很多优点,但所有这些优点都得到了MonoTouch的完全支持,并取消了所有手动内存管理,减少了执行相同任务所需的代码量,允许我重用程序集,并保持我的选项开放,以便能够移动到其他设备和平台。

        5
  •  19
  •   Ian Vink    14 年前

    我换了。MonoTouch让我写应用程序的速度至少是原来的3-4倍(与我在obj c中每月1个应用程序相比,每月4个应用程序)

    更少的打字。

    只是我的经验。

        6
  •  17
  •   phoebus    15 年前

    如果这是你将要开发的唯一一款iPhone应用程序,而且你对开发Mac应用程序也没有兴趣,那么MonoTouch可能是值得的。

    如果你认为你会开发更多的iPhone应用程序,或者想做一些Mac本机开发,学习Objective-C和相关框架可能是值得的。另外,如果你是一个喜欢学习新事物的程序员,那么学习它是一个有趣的新范例。

        7
  •  8
  •   slf    12 年前

    就我个人而言,我认为你在学习目标C的时候会过得更好。

    简而言之:

    • “学习目标C”并不像你想象的那样令人望而生畏,你甚至可以在开始的几周后享受它。
    • 您已经熟悉“C样式”语法,在任何地方都有很多*&()
    • 苹果在记录事情方面做得很好
    • 你将以苹果的预期方式与iPhone互动,这意味着你将直接从源代码中获得好处,而不是通过一些过滤器。

    我发现像Unity和MonoTouch这样的项目应该可以“节省你的时间”,但是最终你还是需要学习他们特定于领域的语言,并且有时不得不放弃这些东西。所有这些可能会花费你尽可能长的时间去学习你试图避免学习的语言(在日历时间)。最后,你没有节省任何时间,你与一些产品紧密结合在一起。

    编辑:我从来没有暗示过对.NET有任何负面影响。我恰好是它的忠实粉丝。我的观点是,仅仅因为你还不熟悉奇怪的objc括号符号就增加了更多的复杂性,这对我来说并没有多大意义。

        8
  •  4
  •   Sixten Otto    15 年前

    加上别人已经说过的话(好吧!):我的感觉是,你基本上把你需要担心的bug数量翻了一番,把MonoTouch中的bug添加到iPhone操作系统中。更新新的操作系统版本将比正常更痛苦。哎呀,到处都是。

    对于MonoTouch,我能看到的唯一令人信服的例子是组织中有大量的C程序员和C代码 必须 利用iPhone。(那种连3500美元都不眨眼的商店。)

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

        9
  •  4
  •   Bryan    15 年前

    三个词:linq to sql

    是的,它值美元。

        10
  •  2
  •   bpapa    14 年前

    我想补充一点,即使有一个公认的答案——谁会说苹果不会仅仅拒绝那些有单点触摸功能的应用?

        11
  •  2
  •   Konrad77    13 年前

    我会把时间花在Objective-C上,主要是因为你可以从这样的网站获得所有帮助。Objto-C的一个优点是可以使用C和C++代码,并且有很多项目在那里。 经过充分测试的 .

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

    如果您还没有完全准备好转向Objective-C,那么最好使用一个平台独立的解决方案,比如HTML5?

        12
  •  2
  •   danfordham    11 年前

    我已经使用MonoTouch几个月了,我从Objective EC移植了我的半成品应用程序,以便将来某个时候支持Android。

    我的经验是:

    错误位:

    • Xamarin工作室。像我这样的独立开发者被迫使用Xamarin Studio。它每周都在好转,开发人员在论坛上非常活跃地识别和修复bug,但是它仍然很慢,经常挂起,有很多bug,调试也很慢。

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

    • 单触式问题。我经历过由事件处理引起的内存泄漏问题,并且必须采取一些非常糟糕的解决方法来防止泄漏,例如在进入和离开视图时附加和分离事件。Xamarin开发人员正在积极研究类似的问题。

    • 第三方图书馆。我花了相当长的时间转换/绑定Objective EC库以在我的应用程序中使用,尽管这在像Objective Sharpie这样的自动化软件中有所改善。

    • 较大的二进制文件。这并不困扰我,但我想我会提到它。在我看来,现在再多几个MB就什么都不是了。

    良好的位:

    • 多平台。我的朋友很高兴地从我的核心代码库中创建了我的应用程序的Android版本,我们正在并行开发,并承诺在Dropbox上建立一个远程Git存储库,进展顺利。

    • .NET。在c.net工作比目标c imo要好得多。

    • 单触式。几乎iOS中的所有内容都在.NET中镜像,而且它非常直接地让事情正常运行。

    • 沙马林。您可以看到,这些人真的在努力改进每件事情,使开发更加顺利和容易。

    我绝对推荐Xamarin进行跨平台开发,特别是如果您有钱使用与Visual Studio一起工作的业务或企业版。

    如果你只是在创建一个iPhone应用程序,而你又是独立开发者,那么我现在就坚持使用Xcode和Objective C。

        13
  •  1
  •   Wolfgang Schreurs    10 年前

    作为一个既有C经验又有客观C经验的人,我想对大多数人来说,Xamarin会很值得。

    C是一种非常好的设计语言,C API的设计也很好。当然,cocoatouchAPI(包括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中的控件类(MudiouCh.UIKIT包含UBiTunn、UIVIEW、UINavigationController等的类……同样是单调的。基金会为NSString、NStask等提供了类)。

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

    现在,Objective-C比C有一些优势,但是在大多数情况下,用C编写应用程序通常会减少开发时间和更干净的代码,并减少将同一应用程序移植到其他平台的工作。一个显著的例外可能是依赖OpenGL的高性能游戏。

        14
  •  -34
  •   Andrew Rollings    14 年前

    单触式图书馆的成本完全与此无关。你不应该在iPhone应用程序中使用Mono的原因是它是一根拐杖。如果你不想费心学习本地工具,那么我就没有理由相信你的产品值得下载。

    编辑:2010年4月14日用MonoTouch编写的应用程序不符合iTunes商店的条件。这是应该的。苹果在Mac上看到了大量的浅端口,使用了跨平台的工具包,比如Qt,或者Adobe自己对System7工具箱的部分重新实现,而它们的长短不一就是不够好。