我爱编程 2011-07-08
iPhone开发须知说明是本文要介绍的内容,主要是来认识iPhone 开发需要知道的内容,也是我们所说的常识,先来看内容。iOS运行环境的设计目标,快速安全的执行应用程序。
快速启动,短暂使用。一个典型情况是,用户从口袋中拿出设备,只使用几秒钟或者几分钟,然后再次放在口袋里。 这要求:
快速启动应用。
使用后能尽快退出。
特殊的系统行为。
在很多地方,iOS都和mac os x特性和行为一样。但是有些情况和mac os x不同:
虚拟内存系统
管理程序内存,iOS和mac os x拥有相同的特性和行为方式。在iOS下,每个程序仍然拥有自己的虚拟地址空间,但是和mac os x不同的是,它使用虚拟内存受到可用物理内存数量的限制。这是因为iOS不能在内存满了以后把可换出的内存分页写入磁盘。作为替代,当应用程序需要腾出更大内存的时候,虚拟内存系统将释放这些可换出内存。这会删除内存中不再使用的部分,也包括只读内容,比如代码页。这些页面能够经常被重新加载到内存中,当再次需要它们的时候。
如果内存继续受到限制,系统可能向正在运行的应用发送通知,要求它释放额外的内存。应用程序应该响应这个通知,并且释放内存。
自动休眠定时器
自动休眠定时器,是一个iOS试图节约电量的做法。当有一段时间没有收到触摸事件,系统将初始化屏幕并最终关闭屏幕。
虽然大部分情况下这种定时处理是好的,但对于游戏开发者,或者其他不通过触摸的应用开发者来说,需要保持屏幕可用,这需要对UIApplication的idleTimerDisabled设置为YES。
这样的设置会带来大量的用电消耗。在开发中要考虑禁用自动休眠定时器的必要性。
多任务支持
在iOS4和后续版本,可以实现后台执行任务。当用户退出一个应用,进程并不中止,而是被转入后台。在转入后台后很短的时间内,大部分应用将被系统挂起,因此不会运行,也就不会需要附加的电量。另外,需要继续运行的应用可向系统请求执行时间用于运行。
无论是挂起的还是继续运行的后台应用,它们都依然在内存中,这让它们重新启动应用花费更少的时间。不过,如果内存使用紧张,系统可以释放后台应用的内存,供其他应用使用。因此后台应用应在转入后台时持久保存当前状态,以便在下次重启应用的时候恢复状态。
安全
iOS的一个重要任务是确保用户在设备上安全运行应用。iOS通过一些特性来保证这些需求。
应用沙箱
因为安全的原因,iOS限制一个应用只能访问文件系统的唯一位置,包括限制对数据和应用首选项(preference)。这就是沙箱特性。沙箱是一组细粒度的控制限制集合,包括对文件、首选项、网络资源、硬件等等的访问。
文件保护
在iOS及以后版本,应用可以使用文件保护来加密文件,确保当用户设备锁定时文件不可访问。
keychain data
Keychain Data是一个容器,用于加密和安全的处理密码和其他保密的信息。keychain data是存储于应用沙箱之外的。如果一个应用删除了,那么keychain data也将自动删除。当用户通过iTunes备份应用数据的时候,keychain data也会备份。然而,该数据只能恢复到备份它的设备上。对应用的升级不会影响keychain data。
文件系统
一些重要的应用目录,为了安全的缘故,一个应用只能拥有一些目录,用来写入应用的数据或者首选项参数。当一个应用安装到系统,会创建该应用的home目录。以下列出一些home目录下的主要的子目录:
< Application_Home>/AppName.app:存放应用程序自身
< Application_Home>/Documents/:存放用户文档和应用数据文件
< Application_Home>/Library/:应用程序规范的顶级目录,下面有一些规范定义的的子目录,当然也可以自定义子目录,用于存放应用的文件,但是不宜存放用户数据文件
< Application_Home>/Library/Preferences,这里存放程序规范要求的首选项文件
< Application_Home>/Library/Caches,保存应用的持久化数据,用于应用升级或者应用关闭后的数据保存
< Application_Home>/tmp/,保存应用数据,但不需要持久化的,在应用关闭后,该目录下的数据将删除
大小写敏感文件系统
iOS文件系统对大小写敏感的。
通过用户桌面电脑共享文件
文件共享可以在应用和用户桌面电脑之间共享文件。但是不允许同一个设备中的不通应用之间共享文件。如果要在应用之间共享数据,需要使用剪切板或者文档交互控制器对象(document interaction controller object)。
备份和恢复
iTunes应用可在适当情况下自动处理备份和恢复。然后,应用需要知道备份和恢复的文件放在哪里。
什么是备份
你不必为你的应用备份和恢复做任何准备。在iOS
以后,当设备连接到电脑并开始同步后,iTunes会自动增量备份所有文件,但不包括下面的目录:
Application_Home>/AppName.app Application_Home>/Library/Caches Application_Home>/tmp
虽然iTunes备份应用自身,但不是每次同步都这样做。从app store上购买的应用,只在随后的同步过程中被iTunes备份。再之后,iTunes并不在同步操作中备份应用,除非应用自身发生变化,比如应用的升级。
为了避免同步过程时间过长,你需要对应用中使用的文件放在哪里做出选择。< Application_Home>/Documents目录用来存放用户文档和应用数据文件。临时文件要保存在Application Home/tmp目录下,这样可以在不需要时删除。如果在两次启动中都需要的数据文件,但是不需要备份的,可放置在Application Home/Library/Caches。比如很大的数据文件,尽量放置在Caches目录下,而不是Documents目录下,Documents目录下文件将做备份,这样会很耗时。
应用更新期间的文件保存
如果文件需要在应用更新后依然存在,需要放置在:
Application_Home>/Documents Application_Home>/Library
模拟器
模拟器提供了一个运行环境,和真机的环境很接近,但是并不完全一样:
模拟器没有真机上的一些限制,比如内存(真机没有内存分页保存到硬盘的特性)
有些技术的行为并不一样,比如OpenGL ES
判断可用的硬件支持
有一些硬件特性,不是所有iOS设备都带的,比如GPS或者照相机。如果你的应用需要这样的特性,需要在用户购买前提醒。如果你使用这样的硬件特性是可选的,那么需要在使用前检查硬件特性是否可用。
如果应用必须使用硬件特性,那么在Info.plist文件中的UIRequiredDeviceCapabilities条目中做设置。这也可以防止没有该硬件特性的用户安装应用到设备上。
可通过iOS判断如下硬件特性的支持情况:
多任务支持
屏幕是iPad还是iPhone尺寸
是否有额外的屏幕加入
硬件磁盘加密特性是否可用
网络是否可用
设备是否可捕获视频
语音输入(麦克风)是否可用
GPS设备当前是否可用
指定的硬件访问是否可用
当前的电池水平