2.1 为移动平台开发应用

如果之前根本没有为Cocoa或它的前身NeXTSTEP开发过应用程序,你可能会感觉到在最初使用Cocoa Touch(iOS的应用程序框架)开发iOS应用程序时,之前所学的所有程序语言(比如Java、.NET)在这里都派不上用场,时常处于一头雾水的混沌状态。这是初学者在学习时的正常状态,你根本不用害怕这种状态,只要坚持下去就会慢慢适应。本书假定你已经具有面向对象的开发经验,以及初步掌握了Swift语言的相关知识如果您没有学习过Swift语言,可以先在iBooks Store上免费下载《The Swift Programming Language》一书学习了解,或者从CocoaChina上下载其中文翻译版本。,这些经验和知识对于编写iOS应用程序是非常重要的。在为移动设备编写应用程序的时候,还需要考虑下面几个问题:

·在iOS中,任何时候都只能有一个应用程序被激活并显示在屏幕上面。从iOS 4开始,当用户按下Home键以后,应用程序可以在系统的后台继续运行,即使是后台运行,它也会受到很多的限制。

·与传统的PC应用程序不同,我们在iOS中只能运行一个窗口应用程序。除非你开发的iOS应用程序附带一个扩展屏幕,通过AirPlay和AppleTV设备投放到电视上。但是,这需要我们编写更多的程序代码。用户与应用程序之间的交互都局限在这个窗口之中,且该窗口的大小固定为整个屏幕。

·虚拟键盘代替实体键盘。2007年乔布斯在iPhone发布会上向大家展示了多部当时市面上流行的“智能”手机,并毫不留情地指出了它们共同的缺点:在屏幕的下方有很大一部分空间被实体键盘所占据,如图2-1所示。不知大家是否想到过,实体键盘最致命的缺点就是按键功能被固定死了,不管你是否需要,它都会存在于屏幕下方——伴随手机的一生。iPhone就不一样了,因为有了虚拟键盘,系统可以根据App的需要,在适当的情况下调出虚拟键盘,并且会根据设定显示全键盘、数字键盘或中文的九宫格键盘等。

·iPhone的屏幕在当今的世界中可以算是佼佼者(三星有后来居上的趋势),自从苹果推出了Retina屏的iPhone以后,一直是手持设备中分辨率最高的。这导致了原来很多必须在PC上完成的任务,现在可以在iPhone上面完成了。第一代iPhone手机的分辨率只有320×480像素,之后的iPhone 4采用了640×960像素的分辨率。如今,最新的iPhone 6 Plus屏幕达到了1080×1920像素。表2-1列出了所有设备屏幕的大小。

图2-1 乔布斯在2007年第一代iPhone发布会时指出了当时“智能”手机的弊端

表2-1 各种iOS设备的屏幕尺寸和分辨率

表2-1中所提到的屏幕硬件大小指的就是iOS设备实际的物理屏幕像素值。然而,在程序员开发应用程序的时候,更多的是与软件屏幕大小打交道。正如大家在表2-1中看到的,在大部分的情况下,软件屏幕大小与硬件屏幕大小是2倍的关系。之所以有两种屏幕大小,完全是因为苹果引入了Retina技术。如果苹果不做这样的区分,所有的应用程序都按设备的硬件屏幕分辨率绘制,软件在Retina设备的屏幕上面只会显示四分之一的大小,用户使用起来非常费劲。所以,苹果使用了比例因子的概念,我们开发的应用程序可以在所有的iOS设备上面都完美地全屏显示,而程序员不用编写任何的代码。针对于iPhone设备,从iPhone 4s开始都是2倍的比例因子,而iPhone 6 Plus则拥有更高的分辨率,所以是3倍的比例因子。

另外,与笔记本的14或15英寸屏幕相比,移动设备的屏幕确实要小很多,所以在设计应用程序的时候,我们要充分利用好这宝贵的屏幕空间,用更加直观的方式为用户呈现关键的信息,还要合理摆放系统所提供的各种控件,例如按钮、滑块、开关等,让用户方便、准确、快捷地进行各种操作。

·考虑开发通用应用程序:为了能够让你的应用吸引更多的眼球,让它完美运行在多种不同的iOS设备上成为一种趋势。如让你的应用可以同时运行在iPhone、7.9英寸的iPad mini和9.7英寸的iPad上。

·有限的存储空间:iOS设备的存储空间不大(16G~128G),因此不能存储太多的图片、音乐或视频。

·不可靠的网络连接:因为是移动设备,所以注定其不会有长时间的持续可靠连接。即便有可靠的连接,发送和接收数据的速度也与无线网络信号的强弱有关。因此,在有网络连接(WiFi网络,非手机的数据流量)的情况下,你的应用程序应尽量缓存相关数据到设备上。为了保证用户使用的流畅度,在下载数据的时候必须使用多线程技术。

·iOS设备的不可用性:移动设备在特殊情况下需要关机(飞机起飞时),也有可能会丢失,当电池电量不足的时候也会自动关机。所以我们的应用程序必须考虑到这些情况。