在讨论iPhone之类的移动平台时,人们会非常关心存储、交互限制和电池寿命之类的问题。移动平台不能提供与桌面系统相同的磁盘空间。存储限制只是一个方面,界面和电量消耗也受到一定限制,所有这些严重制约了开发人员的能力。 使用iPhone,不能对大屏幕、鼠标、物理键盘,甚至物理常开A/C电源进行设计。但平台实体将指导开发人员进行开发。所幸的是,苹果公司竭力设计了一个新平台,该平台极尽所能地利用了其受限的存储、交互控制和电池寿命的灵活性。 1.4.1 存储限制 iPhone提供强大但简洁的OS X安装。虽然整个iPhone OS文件不过是数百兆字节大小(对于如今的操作系统安装来说简直是微不足道),但它提供了丰富的框架库。这些预编译例程的框架支持iPhone用户运行众多小型应用程序,这些应用程序从手机到音频播放,从电子邮件到Web浏览,等等。iPhone为创建灵活的界面提供了足够的编程支持,同时保持系统文件足够小,以符合严格的存储限制。 说明 每个应用程序最大不能超过2 GB。据我所知,还没有哪个应用程序接近过这个大小,当应用程序超过10 MB时,就会招来很多用户的抱怨。 1.4.2 数据访问限制 所有iPhone应用程序都采用沙盒机制。也就是说,应用程序位于文件系统的严格限制部分。你的程序不能直接访问其他应用程序、数据和文件夹。除了其他方面的影响外,这些限制还减少甚至阻止与iTunes库和日程表的交互。但是,程序可以访问因特网上任何免费可用的数据(iPhone需建立了网络连接)。从3.0开始,可以访问共享的系统粘贴板。 1.4.3 内存限制 在iPhone上,内存管理非常重要。iPhone不支持基于磁盘交换的虚拟内存。当内存耗尽时,iPhone将会关闭应用程序——正如苹果公司所说,随机的崩溃并不是你所期望的用户体验。由于没有交换文件,你必须小心地管理内存需求,并为iPhone OS随时因应用程序开始占用太多内存而终止应用程序作好准备。你还需要注意应用程序所使用的资源。过多高分辨率图像或音频文件会导致应用程序自动终止。 苹果公司系统工程师建议,应用程序所占内存不应超过20 MB。开发人员圈内流传着一个粗略的经验法则:当应用程序占用了大约20 MB内存时,iPhone开始发出内存警告。当应用程序所占内存大约为30 MB时,iPhone OS会关闭应用程序。 说明 Xcode使用SDK随带的pngcrush实用工具自动优化PNG图像。(该程序位于/Developer中的iPhone OS平台文件夹中。在命令行中使用-iphone选项运行该工具,将标准PNG文件转换为iPhone支持的格式。)因此,iPhone应用程序中应尽量使用PNG图像作为首选图像格式。开放源码的fixpng实用工具(http://www. cyberhq.nl)则刚好相反。它将经压缩的图像恢复到对Mac友好的格式,是iPhone开发中非常有价值的必备工具。受尊敬的Graphics Convert应用程序(http://lemkesoft.com, $35)也提供iPhone PNG支持。 1.4.4 交互限制 缺少物理输入设备以及小屏幕操作并不意味着缺乏交互灵活性。借助多点触控,可以构建能进行灵活交互的用户界面。借助iPhone的触摸技术,可以设计出使用比实际的掌上物理设备更大的虚拟屏幕进行文本输入和指针控制的应用程序。 智能自动纠错屏幕键盘、内置麦克风(除iPod touch以外的所有设备均有提供)以及探测方向的加速计提供了一些关键技术,将iPhone与其他移动计算设备明显地区别开来。但是,这表示需要对文本输入和窗口滚动等方面进行削减。 在设计中重点关注易实现的界面,而不是类似于桌面程序的界面。记住,一次只能使用一个窗口——这与桌面应用程序可任意使用多个窗口的方式不同。 说明 iPhone屏幕一次最多支持5次触摸操作,但很少有应用程序需要一次使用两次以上的触摸操作。 1.4.5 电量限制 对于移动平台,不能忽略电量限制。也就是说,苹果公司的SDK特性将帮助你设计应用程序,以限制CPU使用并避免用完电池电量。灵活地应用技术(如适当地挂起程序)可以让应用程序在iPhone上正常运行,同时控制软件不会使设备过度发热而烧坏用户的衣袋(有时确实会出现这种情况)。一些持续运行的程序会产生相当高的热量,这会让手机变得非常烫手并快速耗完电池电量。Camera应用程序就是一个很好的例子。 1.4.6 应用程序限制 苹果公司提出了一项强有力的“一次一个应用程序”策略。这表示,第三方开发人员不能开发在后台运行的应用程序,如苹果公司的Mail和Phone实用工具。程序每次运行时,它必须清除Dodge,然后再将控制传递给用户选择的下一个应用程序。不能让检查新消息或定期发送更新的后台程序一直运行下去。 另一方面,从固件3.0开始,苹果公司支持推送(push)来自Web服务的数据。注册的服务可以将标记编号和消息推送给用户,让他们了解数据正在这些服务器上等待。第16章将介绍推送通知,并展示如何将这些消息发送给用户。 说明 根据iPhone的服务条款,不能在提交给App Store的应用程序中使用Cocoa Touch的插件架构。可以构建在编译时包含的静态库,但是不能使用任何在运行时链接到任意代码的编程解决方案。 1.4.7 用户行为限制 虽然这不是基于物理设备的限制,但是仍然必须适应这样的事实:iPhone用户偶尔会使用基于手机的应用程序。他们进入一个程序,很快使用完毕,然后很快离开。设备的手持特性意味着必须围绕短期交互来设计应用程序,并让应用程序在用户接到电话或将手机放回口袋时自动关闭。在会话之间保存应用程序的状态,以便快速重新启动程序,并大致恢复到程序上次运行时所执行的任务。这要求程序员为之付出心血,但是为了让用户满意,在这方面花时间是值得的。