【问题标题】:How big is an Objective-C iPhone app vs. a MonoTouch app?Objective-C iPhone 应用程序与 MonoTouch 应用程序相比有多大?
【发布时间】:2009-09-18 14:08:35
【问题描述】:

我正在考虑将 MonoTouch 用于一些 iPhone 开发,但有效负载大小是一个重要因素。

对于以前从未在 iPhone 上安装过 Mono 的用户,Objective-C“Hello World”应用程序的大小与 MonoTouch“Hello World”应用程序相比有多大?

更具体地说,大约是多少。需要下载的字节数,大约是多少。安装后使用的字节数?

【问题讨论】:

    标签: iphone objective-c mono xamarin.ios


    【解决方案1】:

    Objective-C 中的“Hello world”程序占用 50 KB(整个 .app 文件夹)。 使用 MonoTouch,类似的“Hello World”应用程序占用 5 MB(整个 .app 文件夹),考虑到它有一个包含垃圾收集的运行时,这一点也不差。

    【讨论】:

    • 应用压缩后发送到应用商店,因此下载大小减少 30% 到 50% 左右。在设备上安装后,该应用将占用与您构建的 .app 文件夹相同的数量。
    • 不正确 Zoran。压缩后的可执行文件大小不是应用商店列出的大小。我们的一个应用程序在压缩和上传时小于 10mb,但现在在商店中显示为 14.7。不幸的是,这使我们超出了 3g 下载的限制。
    • 5MB 是巨大的! Mac OS X 上的 objc + GC 占用不到 1.25MB。我敢打赌,这 5MB 中的大部分是 Mono API 和 Cocoa Touch API 之间的粘合剂。
    • 我认为 Apple 像对 Bootcamp 一样为 Mono Touch 提供一些支持是非常明智的:是的,人们现在可以轻松地在 Mac 上安装 Windows,但这就是我开始的原因在 Mac 上!我买了一个,以为我可能会放弃它并在上面安装 Windows……我想我不会像喜欢硬件那样喜欢 OS X。 6 个月后,我彻底放弃了 Windows!支持 Mono Touch 可能会给 Apple 带来类似的好处。我不打算使用 Mono Touch,但拥有它是一件很棒的事情。他们应该将 Mono 运行时与每部 iPhone 捆绑在一起,从 v4.0 开始
    • 应用程序没有那么大,我不确定“5meg”是从哪里来的。除非您包含整个 monotouch API 集,否则大多数应用程序只使用一个区域。现在我从 XCode 切换到 Monotouch,我开发了更多应用程序并销售了更多应用程序并赚了更多钱,最终,这是商业开发人员的最佳基准。快乐的付费客户和很多客户。
    【解决方案2】:

    在 1.5 单点触控中

    发布版本(即使用分发许可构建的应用程序)只有默认项目设置,大小为 5 MB。其中 4.3 MB 是二进制可执行文件。

    根据我的经验,它们通常会增加到 10 MB,并且论坛描绘了相同的画面。应用商店会报告解压缩后的大小,但下载时会压缩。压缩后的文件大小约为 3 MB,即使在 3G 上也可以。

    在我看来,大多数人在下载应用程序之前不会查看文件大小,也不会特别在意。 3G 下载的应用商店限制现在为 20 MB,这完全在 MonoTouch 大小范围内。

    说得好听点,是的,它比 Objective-C 的同类产品大很多,可能会吓跑一些担心在 16 GB 空间中多占用 4-10 MB 的人。然而,也有上市时间和现有的可用于 .NET 的工具。我在 Visual Studio 2010 中开发我所有的 MonoTouch 应用程序,然后在 Mac 上测试它们,我认为即使是 Apple 也不会认为他们的 IDE 接近行业领导者。

    【讨论】:

    • 嘿,克里斯——我对 MonoDevelop 有点失望,对 VS 方法很感兴趣。您是否在任何地方写了一篇关于您发现设置它的好方法的文章?还是我应该将其改写为一个 SO 问题? :)
    • @David 我在shrinkrays.net/code-snippets/csharp/… 有一小部分关于 VS2010 的内容,向下滚动到“在 Visual Studio 2008/2010 中使用单点触控项目”
    • 酷,谢谢。看起来我已经为你的页面添加了书签,但没有建立联系。 :)
    • @David Full 如何:blog.binaryfinery.com/pages/…
    • 致任何想要将 Visual Studio 2010 与 MonoTouch 一起使用的人。许多涉及破解 cproj 文件以及必须维护项目和解决方案文件的两个版本的解决方法已被这个出色的 VS2010 插件淘汰:github.com/follesoe/VSMonoTouch
    【解决方案3】:

    来自MonoTouch and Size of Executables的这个问题:

    MonoTouch 不能转换为 Obj-c。它编译为 .NET IL,然后 编译它(以与 JIT 编译器相同的方式,但在它之前 运行 - 因此“提前”编译器)到本机 ARM 代码中。

    所以:

    Obj-C -> GCC(或 LLVM)-> ARM 代码

    vrs MT:

    C# -> IL -> (AOT 编译器) -> ARM 代码

    3.x 中的输出二进制文件更大,因为您还包括 很多 .NET 框架(嗯,Mono 框架,但相同),所以如果 例如,您使用 System.Xml,它必须将其包含到输出中 - 与 System.dll 等相同。链接器非常聪明,但输出 二进制文件总是会更大

    对我来说,唯一重要的是加载时间和压缩 二进制大小。 “hello world”应用的压缩二进制文件约为 2.5-3meg我被告知在 4.x 中更小)对于 obj-c 大约 300k。区别 添加的越多越少,因为它只包括 system.dll 一次。 MT vrs Obj-c 的加载时间,在 相同的时间,足够接近相同。任何一个都可以做成 缓慢加载(只需在 FinishedLaunching 中长时间运行 而不把它放在另一个线程上)。

    回答者接着说他觉得 MonoTouch 比 Objective-C 更有效率。 YMMV。

    【讨论】:

    • @RedFilter:如果不是 Jeff Atwood 在博文中指出,我不会知道它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多