zoukankan      html  css  js  c++  java
  • iOS 部分机制

    1. IOS应用或者说移动设备上的应用的最大的特征是:Fast Launch, Short Use。移动用户路上、机场候机中、地铁中等场合使用,每次用户使用移动设备的时间大多是非常短,需要应用能够快速启动。在IOS 4多任务的环境下,用户在同一时间只和当前的应用交互,其他应用被运行在系统的后端环境亦即内存中,直到用户切换环境唤起或者用户/系统将其从内存中彻底移出。显然,内存中存活的IOS应用从后端切换到前端的速度要比IOS应用启动的速度快得多,然而需要指出的是,由于内存的限制,系统有可能可能将最近不使用的应用从内存中清除,由于该清除动作可能发生在任何时间并无没有任何提示,IOS应用应当在切换到后台的时候将用户当前的用户数据和状态保存起来,以至在下次唤醒应用中,能够恢复应用的状态。

    2. 内存管理,IOS的内存管理使用的是和Mac OS X一样的机制,在IOS应用中,每个应用具有独立的虚拟地址空间,但是和Mac OS X不同的是,虚拟地址空间受到物理内存大小的限制。该限制是因为IOS的内存耗尽的时候并不采用将内存映射到磁盘空间的机制。虚存管理系统此时只是要求释放只读的内存页,比如说,代码页。被释放的内存页当被需要的时候将重新载入内存。

    当内存空间受限时,系统将通知所有的应用,要求应用释放暂时不用的内存。应用应该响应该消息,释放部分内存,缓解内存的压力。请参见http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Performance/Performance.html#//apple_ref/doc/uid/TP40007072-CH8-SW6

    3.自动休眠时钟,为了省电的原因,当IOS系统检测到最近没有手势事件触发的时候,会开始将设备的屏幕亮度调底,如果还无手势事件触发,系统将彻底关闭屏幕的电源。如果开发者开发一个IOS应用,长时间不依赖于手势事件,例如,例如利用重力感应器的游戏或者是视频类应用,可能需要关闭该自动休眠时钟,当然,出于省电考虑,应用应当尽量尽量不使用和少用该功能。如何在IOS应用中如何能够省电?该问题在后续的资料笔记中有,这里不再赘述。

    4.IOS的SAND BOX执行环境。

    基于安全的理由,IOS的应用被限制文件系统的一个唯一目录(应用的home目录)下执行,所谓的SNADBOX是一系列细粒度的限制,限制IOS访问文件系统、网络资源、硬件资源等系统资源,每个IOS的应用能访问自己的SANDBOX定义的资源,不能访问其他IOS应用定义的资源。

    5.应用的home目录的子目录结构介绍

    5.1 <Application_Home>/AppName.app
        
    该目录包含应用的本身,在应用安装的时候目录内容会被签名,该目录如果修改,将不能再次启动。在IOS 2.1及其后续的版本,此目录内容不会被iTunes所备份,但是,iTurnes 会将用户购买的所有App Store中的应用同步到设备中。

    5.2<Application_Home>/Documents/
        
    该目录用于存放用户的文档和应用的数据文件,其内容能被iTunes备份。用户想在应用之外读取这个目录的内容可以通过文件共享,不过这种读取不是指让其他应用能够访问本应用的Document目录,而是用户的桌面电脑通过iTunes能访问本应用的Document目录,下面是对这个功能的原文描述:Applications that want to make user data files accessible can do so using application file sharing. File sharing enables the sharing of files between your application and the user’s desktop computer only. It does not allow your application to share files with other applications on the same device. To share data between applications, use the pasteboard. To share files between applications, use a document interaction controller object.

    5.3 <Application_Home>/Library/
    该目录用以存放应用的非用户数据,该目录下通常包含Preferences、Caches、tmp等固定含义的标准目录,当然用户也可以自创建目录。该目录除了Cache、tmp目录外,其他部分将被iTunes备份。只要开发者具有非用户数据,又希望被iTunes备份,可以放在该目录下。

    5.4 <Application_Home>/Library/Preferences
        
    此目录用于存放应用指定的配置选择文件,开发者应该通过NSUserDefaults class or CFPreferences API对此类文件进行存取,而不应该直接操作该目录下的文件。此目录的内容将被iTunes 备份。

    5.5 <Application_Home>/Library/Caches
        
    此目录用于存放重启动过程中需要读取的临时状态文件(为了恢复到上次运行时的状态,特别是在多任务应用从后台被唤醒到前端的场合),或者软件升级过程中需要临时保存的文件。应用负责创建和删除此类文件,并且由于此类文件可能会被iTunes在对系统进行“全恢复”操作时删除,应用如果发现该目录下的文件不存在应该能自动重建。

    自从iOS 2.2 及后续的版本,此目录的内容不被 iTunes备份。

    5.6 <Application_Home>/tmp/

    非Cache类型的临时目录,应用必须负责删除该目录下的文件,当系统发现该应用不再运行时,也会清除未目录下的文件。


    自从iOS 2.1 以及后续版本, 此目录的内容不被 iTunes备份。

    6.文件保护


    自从IOS 4及其后续版本,应用可以使用文件加密保护的功能,具体说来,当设备被锁住的时候,加密文件将不能被访问。文件保护利用特定型号的设备( iPhone 3GS and iPhone 4)的硬件提供的加密功能为用户的蜜柑数据添加多一层的保护。文件保存在存储中一直处在加密后的状态,当设备被锁住的时候,即便是拥有该文件的应用也不能读取该加密文件,用户需要显式的解锁设备(输入解锁的密码)后,文件才能被访问。(文章没有提到IOS 上文件系统的类型是什么)

    设备上的文件系统必须在格式化指定支持文件保护,对于现有的设备,如果需要使用文件保护功能,用户必须重新格式化设备,以及从备份中将以前的数据恢复到设备上。

    用户必须设置保护的密码

    应用必须指定那个文件需要保护,具体做法参见http://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/StandardBehaviors/StandardBehaviors.html#//apple_ref/doc/uid/TP40007072-CH4-SW4

    应用必须逐个文件的指定哪些文件需要保护,一旦触发了文件保护就不能回退。应用还必须处理某些文件应该被保护但是没有被设置的情况,这个可能是用户从前一个版本的IOS备份而来的文件,在该版本中,文件保护尚未被启用。

    7. KEYCHAIN DATA

    KEYCHAIN是一种安全的加密的容器用以存放密码和其他验证凭证。KEYCHAIN的数据存放在应用的SandBox外面(SandBox的定义请看前面)。在IOS 4.0以前的版本,KEYCHAIN的数据只能在原备份的设备上恢复。在IOS4.0以及后续设备,当一个KeyChain的数据项可以备份到不同的设备上。

  • 相关阅读:
    跳跃表的分析与实现
    怎样解决jsp:include标签在包括html文件时遇到的乱码问题
    高速掌握函数指针
    行编辑距离Edit Distance——动态规划
    栈的实现
    客客安装英文语言包
    Swift和Objective-C混合编程
    Android中关于JNI 的学习(三)在JNI层訪问Java端对象
    多台主机共享键鼠
    Phalcon 开发工具(Phalcon Developer Tools)
  • 原文地址:https://www.cnblogs.com/codings/p/3566970.html
Copyright © 2011-2022 走看看