我正在考虑将 MonoTouch 用于某些 iPhone 开发,但有效负载大小是一个重要因素。
对于以前从未在 iPhone 上安装过 Mono 的用户,Objective-C“Hello World”应用程序的大小与 MonoTouch“Hello World”应用程序相比有多大?
更具体地说,大约是什么。需要下载的字节数,大约是多少。安装后使用的字节数?
我正在考虑将 MonoTouch 用于某些 iPhone 开发,但有效负载大小是一个重要因素。
对于以前从未在 iPhone 上安装过 Mono 的用户,Objective-C“Hello World”应用程序的大小与 MonoTouch“Hello World”应用程序相比有多大?
更具体地说,大约是什么。需要下载的字节数,大约是多少。安装后使用的字节数?
Objective-C 中的“Hello world”程序占用 50 KB(整个 .app 文件夹)。使用 MonoTouch,类似的“Hello World”应用程序占用 5 MB(整个 .app 文件夹),考虑到它有一个带有垃圾收集的运行时,这一点也不差。
在 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 接近行业领导者。
从这个关于MonoTouch and Size of Executables 的问题:
MonoTouch 不能转换为 Obj-c。它编译为 .NET IL,然后将其编译(以与 JIT 编译器相同的方式,但在它运行之前 - 因此“提前”编译器)编译为本机 ARM 代码。
所以:
Obj-C -> GCC(或 LLVM)-> ARM 代码
vrs 公吨:
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。