c# - 新 iPhone 开发者的 MonoTouch 与 Objective-C

标签 c# objective-c ios xamarin.ios

我正在与一家小型初创公司合作,目标是创建 iPhone 应用程序。我们团队中的程序员都知道 C 和 Java,但我们没有 ObjC/C#/iPhone 经验——无论如何我们都会学到一些东西。我在这个主题上看到的所有问题都是从 C# 程序员进入 iOS 的角度出发的,所以我没有任何关于学习其中一个或另一个的相对优点的信息。

所以,我想知道的是 C# 和 Objective-C 对于新程序员的相对优点,就这些而言:

  • 表现
  • 易于使用
  • 易于学习
  • 可靠性(即,新的 iOS 版本是否会破坏 MonoTouch 应用程序?)

此外,使用 MonoTouch 编写代码对使用 Android 进行跨平台开发有什么好处吗?

最佳答案

如果您的初创公司的目标是创建 iPhone 应用程序,那么显然您应该学习构建 iOS 应用程序所使用的语言 Objective-C。您的团队已经有使用 C 语言的经验,因此应该很容易上手。 The Big Nerd Ranch books会让你在一两周内启动并运行(我与 Big Nerd Ranch 无关,我只是觉得他们很棒)。

考虑到您的团队没有 C#/.NET 经验,我不明白您为什么要使用 MonoTouch。还有很多其他框架,例如 MonoTouch,包括 Titanium SDK (JavaScript),RubyMotion ( ruby ),等等。所有这些都很棒,但正如我所见,它主要是为那些有各自语言经验的人准备的。它们允许您使用您更熟悉的语言编写 iOS 应用程序,但有以下缺点:

  1. 性能可以一样好,但通常比用 Objective-C 编写的应用程序差一点(有时差很多)。
  2. 学习资源不如 iOS SDK/Objective-C 丰富。有很多人想要制作 iOS 应用程序,其中一些人使用这些框架,但他们被稀释了。只有一小部分可用于 iOS 开发的资源将用于任何给定的框架。
  3. 这些框架都是基于 iOS SDK/Objective-C 的,自然开发总是落后一步。如果 Apple 在下一版本的 iOS SDK 中推出全新的 API,您将不得不等待这些框架进行调整(用 Objective-C 编写的应用程序也可能会崩溃,但基于第 2 点)。
  4. 这些框架中的大多数都需要熟悉 iOS SDK。您仍然需要知道应用程序在启动时调用 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 方法,但此外您还需要记住如何将其转换为适合 MonoTouch 的方法:public override bool FinishedLaunching (UIApplication app, NSDictionary options)。 iOS SDK 非常庞大,大多数 iOS 开发人员都依赖 Apple 的文档来获得洞察力。因此,您将查看为 Objective-C 编写的 API 文档,并将方法转换为您选择的框架。
  5. Objective-C 生态系统在不断发展,出现了很酷的新项目,例如 CocoaPods , bwoken等。这些主要是在考虑 Objective-C 和 Xcode 的情况下开发的。将它们配置为与您选择的框架一起工作几乎总是会给您带来额外的时间和工作。

以上几点通常使我无法深入研究任何其他框架。它们都非常酷,但采用它们的主要优点似乎是促进具有 Objective-C 之外的深厚技能集的人的开发,或者允许缺乏资源投资 Android iOS(和 Windows Phone)程序员。希望采用者的 yield 超过上述成本。

Also, would writing in MonoTouch have any benefits for cross-platform development with Android?

我想是的。事实上,MonoTouch homepage吹捧这是使用该框架的主要优势。我不太确定 View / Controller 类,因为它们似乎会绑定(bind)到 UIKit 中,但封装在模型中的逻辑应该很容易移植。

长话短说,我认为您和您的团队应该坚持使用 Objective-C 进行 iOS 开发。

关于c# - 新 iPhone 开发者的 MonoTouch 与 Objective-C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10573607/

相关文章:

c# - 'await Task.Delay(5000)'之后的代码直到relaycommand执行完成才执行

ios - 快速执行选择器 :withObject:afterDelay: is unavailable

ios - 在 iOS 上调用电话的完整谷歌语音网址是什么?

c# - 替代 .NET 的 Uri 实现?

c# - 为什么对象在向上转换时保存属性

iOS VFL 显示两个按钮彼此相邻

ios - 如何在 SwiftUI 中检查按钮点击时 TextField 的验证(不是通过使用 NavigationLink)?

ios - 是否可以在圆形图像中变换UIView?

c# - 在 Azure 上运行一次 while(true)

iphone - iPhone 的安全远程密码实现