Core Services层为所有的应用程序提供基础系统服务。可能应用程序并不直接使用这些服务,但它们是系统很多部分的基础。
高阶特性
下面的部分会描述Core Services层一些关键技术:
一、云存储
iOS5.0引入,云存储允许你的应用程序存储用户文档和数据到云端,以及从用户的电脑和iOS设备访问这些数据。把用户的数据存在云端,意味着用户可以在任何设备上查看以及编辑这些文档无需同步以及设备间传递这些文件。在用户的iCloud的账号中存储这些文件还为用户提供了一层安全防护,即使用户丢失了一个设备,用户的数据是不会因此而丢失的。
有两种方法可以让应用程序使用云存储,每一种都有自己的使用场景。
1、iCloud文档存储------使用这个特性存储用户文档和数据到用户的iCloud账户
2、iCloud键值数据存储-----使用这个特性去共享应用程序中的少量实例对象。
大多数应用程序使用iCloud文档存储特性通过iCloud账户共享文档数据,这个特性是用户对iCloud存储的认识,用户关心的是这些共享的文件是否跨设备了,是否可以通过一个给定的设备查看以及管理这些文件。相比之下,iCloud键值数据存储是用户看不到的,这是你应用程序共享少量数据(几十KB)一种方式。应用程序使用这个特性来存储非关键性的数据,而不是重要数据。例如存储用户偏好。
如要了解如何在应用程序中使用iCloud,参考iCloud Design Guide。
二、自动引用计数
iOS5引入,自动引用计数(ARC)是一个编译器级别的功能,简化了OC对象生命周期的管理,相对于开发者自己时刻记着何时retain和release对象,ARC会在编译期间自动评估你对象的生命周期并且插入适当的内存管理方法(retain和release方法)。
ARC替代了出现在iOS早期的版本中的传统内存管理模式,你创建的新工程默认使用ARC,Xcode也提供了工具把非ARC工程转换为ARC工程,更多关于ARC的信息,参考Transitioning to ARC ReleaseNotes。
三、块对象
iOS4.0引入,block对象是一个C语言层面上的对象,可以嵌入到你的C和OC代码里面。block对象本质上是一个匿名函数,可以像函数一样拥有参数和返回值,其他语言里把这种对象称作closure或者lambda。blocks多用于回调 或者 用于绑定操作和操作需要的数据。
在iOS中,blocks常用于以下场景:
1、作为代理和代理方法的替代
2、作为回调方法的替代
3、一次性操作完成之后的事件处理
4、执行集合中每个元素的方法
5、和disPatch queue一通实现异步任务。
关于block对象以及它们的使用的介绍,参考A Short Practical Guide to Blocks。更多关于blocks的信息,参考Blocks Programming Topics。
四、数据保护
iOS4.0引入,数据保护允许应用程序使用设备内置的编码器对用户的敏感数据进行处理。当你的应用程序把某个文件指定为保护类型时,系统会把这个文件以加密形式存放在硬盘上。当设备被锁定时,你的应用程序和潜在的入侵者都无法访问文件内容。然而,当你的设备被用户解锁之后,会创建一个解密密钥,以允许你的应用程序访问文件。
iOS5之后,数据保护增加了被保护文件的安全级别,这些级别允许你访问一个已经打开的文件,尽管用户已经锁定了设备,或是解锁屏幕后用户随后又锁定了设备。
实现数据保护需要你考虑如何创建和管理想要保护的数据。应用程序必须保证数据创建时的安全,还要处理锁屏与解锁时数据的安全。
更多关于如何在应用程序为文件添加数据安全的资料,参考iOS App Programming Guide。
五、文件共享支持
iOS3.2引入,文件分享能让您通过iTunes(版本9.1以后)直接看到应用程序中的用户数据。一个应用程序设置了文件共享之后,Documents文件夹下的内容可以被用户从iTunes中看到,用户可以根据需要通过iTunes往此文件夹增加文件或者从此文件夹移出文件。这个特性不允许你把文件共享给同一个设备上的其他应用程序。如果要给其他程序共享文件你需要使用粘贴板后者文档交互控制器对象。
启动应用程序的文件共享,需要完成以下事项:
1、往应用程序的Info.plist文件添加一个key“UIFileSharingEnabled”,并且将此key对应的value设置为YES。
2、把你需要共享的文件存放到应用程序的Documents文件夹里面。
3、设备连接到iTunes之后,iTunes应用程序选项卡中的文件共享部分会显示你设备里所有支持文件共享的应用程序,用户可以把文件拖动到应用程序Documents文件夹或者把里面的文件拖动到电脑上。
支持文件共享的应用程序能检测到是否有文件添加到Documents文件夹,应用程序需要做适当的回应。例如,你的应用程序应该在界面上显示出来这些新添加的文件,而不是弹出Documents文件列表询问用户需要做什么操作。
更多UIFileSharingEnabled的信息,参考Information Property List Key Reference。
六、Grand Central Dispatch
iOS4.0引入,它是BSD级别的技术,可用于在应用程序内管理多个任务的执行,GCD技术将异步编程模型和高度优化内核结合在一起,可作为多线程的便捷(且更高效)替代。同时,它为许多底层任务(例如读写文件描述符、实现计时器、监视信号和处理事件等)提供替代方案。
更多关于程序内使用GCD的方式,参考Concurrency Programming Guide。更多关于GCD函数的信息,参考Grand Central Dispatch(GCD)Reference。
七、程序内购买
iOS3.0引入,通过该功能,你可以在应用程序内出售内容或者服务,该功能使用Store Kit框架来实现,它可以为使用iTunes账户进行的财务交易的处理提供基础支持,应用程序只需要处理用户体验及代售内容或服务的展现。
iOS6中,增加了内容托管和应用程序内购买iTunes内容的支持。通过内容托管,你可以把用于下载的内容存储在苹果的服务器上,通过iTunes内容购买功能,你的应用程序标记需要卖的物品,剩下的一些事物由Store Kit帮你处理。
更多关于程序内购买的支持,参考In-App Purchase Programming Guide。更多关于Store Kit框架的信息,参考Store Kit Framework。
八、SQLite
SQLite库允许开发者将一个轻量级的SQL数据库潜入到应用程序,而且开发者不需要运行独立的远程数据库服务器进程。在此之后,开发者可以在应用程序中创建本地数据库文件,管理文件的表和记录。虽然SQLite数据库出于通用目的而设计,但它还是针对数据库记录的快速访问做过优化。
用于访问SQLite库的头文件位于<iOS_SDK>/usr/include/sqlite3.h。在该路径中,<iOS_SDK>是Xcode安装目录中目标SDK的路径,更多关于如何使用SQLite的信息,访问http://www.sqlite.org网站。
九、XML支持
Foundation框架支持使用NSXMLParser类从XML文档中解析元素,而libxml2库则为操作XML内容提供支持,libxml2库是开源的,它可以让你快速地解析或写入任意的XML数据,也可以将XML内容转换为HTML文件。
用于访问libxml2库的头文件位于<iOS_SDK>/usr/include/libxml2/。在该路径中,<iOS_SDK>是Xcode安装目录中目标SDK的路径,更多libxm2的使用信息,请访问http://xmlsoft.org/index.html网站。
Core Services层框架
Accounts Framework
iOS5引入,为特定用户账号提供一个单点登录模型,单点登录提高了用户体验,因为应用程序不在需要分别提示用户输入账户的登录信息。它还简化了你应用程序管理账户授权的过程。iOS5.0里,应用程序可以使用这个框架结合Twitter框架访问用户的Twitter账户。
更多关于Accounts框架类的信息,参考Accounts Framework Reference。
Address Book Framework
Address Book框架支持编程访问存储于用户设备中的联系人信息。如果应用程序使用到联系人信息,则可通过该框架访问并修改用户联系人数据库的记录。举个例子,通过使用该框架,聊天程序可以获取一个联系人列表,利用此列表初始化聊天会话,并在联系人视图显示列表的联系人。
iOS6以后,访问用户联系人信息需要经过用户的允许,应用程序必须做好被拒绝访问的准备,应用程序也需要提供一个属性列表来描述为什么要访问通讯录,用以获取用户许可。
更多Adress Book框架的功能,参考Address Book Framework Reference for iOS.
Ad support Framework
iOS6引入,Ad Support框架为要用广告服务的应用程序提供了一个广告标识符。这个框架同样提供了一个opt-out标识来标明用户是否退出广告。应用程序需要读取并根据opt-out标识,决定是否访问广告标识符。
更多关于这个框架的信息,参考Ad Support Framework Reference。
CFNetwork Framework
CFNetwork框架提供一组高性能基于C语言的接口,它们为使用网络协议提供面向对象抽象。通过这些抽象,你可以对协议栈进行更精细的控制,而且可以使用诸如BSD socket这类底层结构。你也可以通过该框架简化诸如与FTP或HTTP服务器通讯以及DNS主机解析这类任务。下面列举一些可以使用CFNetwork框架执行的任务:
1、使用BSD sockets
2、使用SSL或TLS创建加密连接
3、解析DNS主机
4、使用HTTP,校验HTTP以及HTTPS服务器
5、使用FTP服务器
6、发布、解析并浏览Bonjour服务。
CFNetwork理论及实现都以BSD socket为基础。更多关于如何使用CFNetwork框架的信息,参考CFNetwork Programming Guide和CFNetwork Framework Reference。
Core Data Framework
iOS3.0引入,Core Data框架是一种管理模型-视图-控制器应用程序数据模型的技术,它适用于数据模型已经高度结构化的应用程序。通过此框架,您再也不需要通过编程定义数据结构,而是通过Xcode提供的图形工具构造一份代表数据模型的图标。在程序运行的时候,Core Data框架就会创建并管理数据模型的实例,同时还对外提供数据模型访问接口。
通过Core Data管理应用程序的数据模型,可以极大程度减少编写的代码数量。除此之外,Core Data还具有下述特征:
1、将对象数据存储在SQLite数据库以获得性能优化
2、提供NSFetchedResultsController类用于管理表视图的数据
3、管理undo/redo操作
4、属性值校验支持
5、支持对数据变化进行传播,并且不会改变对象间的关联
6、支持对数据进行归档,过滤,并支持对内存数据进行管理
如果您正在开发新应用程序或打算对某个现有的程序进行大幅度更新,请考虑使用Core Data。如果需要了解如何在iOS应用程序中使用Core Data,参考Core Data Tutorial for iOS.如果需要进一步了解Core Data框架中的类,参考Core Data Framework Reference。
Core Foundation Framework
CoreFoundation框架是一组C语言接口,它们为iOS应用程序提供基本数据管理和服务功能。下面列举该框架支持进行管理的数据以及可提供的服务:
1、群体数据类型(数组、集合等)
2、程序包
3、字符串管理
4、日期和时间管理
5、原始数据块管理
6、偏好管理
7、URL及数据流操作
8、线程和RunLoop
9、端口和socket通讯
CoreFoundation框架和Foundation框架紧密相关,它们为相同功能提供接口,但Foundation框架提供OC接口。如果您将Foundation对象和Core Foundation类型参杂使用,则可利用两个框架之间的“toll-free-bridging”。所谓的Toll-free-bridging是说您可以在某个框架的方法或函数同时使用Core Foundation和Foundation框架中的某些类型。很多数据类型支持这一特性,其中包括群体和字符串数据类型。每个框架的类和类型描述都会对每个对象是否为toll-free bridged,应和什么对象进行桥接进行说明。
更多信息,参考Core Foundation Framework Reference。
Core Location Framework
CoreLocation矿建可用于定位某个设备当前经纬度。它可以利用设备硬件特性,通过附近的GPS、蜂窝基站或者WiFi信号等信息计算用户方位。Maps应用程序就是利用此功能在地图上显示用户当前位置。您可以将此技术结合到应用程序中,以向用户提供访问信息。例如,应用程序课根据用户当前位置搜索附近饭店、商店或其他设施。
在iOS3.0系统中,该框架开始支持访问iOS设备的方向信息
在iOS4.0系统中,该框架开始支持低能耗的方位监视服务,该服务利用蜂窝基站跟踪用户方位。
如何使用Core Location去获得位置以及方向信息,参考Location Awareness Programming Guide和Core Location FrameworkReference。
Core Media Framework
iOS4.0引入了Core Media框架,此框架提供AV Foundation框架使用的底层媒体类型。只有少数需要对音频或视频创建及展示,进行精确控制的应用程序才会涉及此框架,其他大部分应用程序都用不上。
如需进一步了解此框架的函数和数据类型,参考Core Media Framework Reference。
Core Motion Framework
Core Motion框架提供了一个单一的接口集,用于访问设备上所有基于运动的数据。这个框架提供了一系列Block接口来访问和处理原始或加工后的加速计数据。通过内置的陀螺仪,你可以检索原始数据、映射后的属性以及在设备上的旋转速率。你可以在游戏或者其他需要通过运动进行输入来提高用户体验的应用程序中使用加速计和陀螺仪。
更多这个框架的类和方法的信息,参考Core Motion Framework Reference。
Core Telephony Framework
iOS4.0引入了Core Telephony框架,此框架为访问具有蜂窝无线的设备上的电话信息提供接口,应用程序可通过它获取用户蜂窝无线服务的提供商信息。如果应用程序对于电话呼叫感兴趣,也可以在相应事件发生时得到通知。
如需进一步了解如何使用该框架的类和方法,参考Core Telephony Framework Reference。
Event Kit Framework
iOS4.0引入了Event Kit框架,此框架为访问用户设备的日历事件提供接口,您可以通过该框架访问用户日历中现有事件,可以增加新事件。日历事件可包含闹铃,而且可以配置闹铃激活规则。
iOS6添加了创建和访问用户设备上提醒的功能,你创建的提醒会通过“提醒”应用程序呈现出来。此外访问日历和提醒需要通过用户许可,应用程序要做好被拒绝访问此功能的准备,同样需要提供一个属性列表来描述需要访问的原因,以便得到用户许可。
更多这个框架中类和方法的信息,参考Event KitFramework Reference和Event Kit UI Framework。
Foundation Framework
Foundation框架为Core Foundation框架的许多功能提供OC封装。您可以参考Core Foundation Framework了解前面对Core Foundation框架的描述。Foundation框架为下述功能提供支持:
1、群体数据类型(数组、集合等)
2、程序包
3、字符串管理
4、日期和时间管理
5、原始数据块管理
6、偏好管理
7、URL及数据流操作
8、线程和RunLoop
9、Bonjour
10、通讯端口管理
11、国际化
12、正则表达式匹配
13、缓存支持
如需进一步了解如何使用该框架的类和方法,参考Foundation Framework Reference。
Mobile Core Services Framework
iOS3.0引入了Mobile Core Services框架,此框架定义统一类型标识符(UTIs)使用的底层类型。
如需进一步了解此框架定义的类型,参考Uniform Type Identifiers Reference。
Newsstand Kit Framework
iOS5引入了Newsstand框架,为用户提供了一个专属位置来阅读杂志和报纸。出版商可以在他们自己的应用程序使用Newsstand Kit框架将自己的报刊和杂志放在Newsstand里,它允许你在后台下载新的报刊和杂志,在你开始一个下载,系统会去处理下载操作,并通知你应用程序中有新的内容。
更多关于管理Newsstand下载的类的信息,参考Newsstand Kit Framework Reference。更多关于如何使用远程通知的信息,参考Local and Push Notification Programming Guide。
Pass Kit Framework
iOS6引入,Pass Kit:使用web服务,一个新的文件格式,是OC层次上的框架,来实现通行证的下载。公司可以创建通行证代表物品,例如优惠券、登机牌、活动门票和折扣卡业务。相对于携带这些实实在在的物品,Pass Kit实现了将这些信息存储于iOS设备的功能,使用起来和实物是一样的效果。
通行证通过你公司的web服务创建,使用邮件、Safari或者你的程序传递到用户的iOS设备,通行证本身使用了一个特殊的文件格式并且会在传递之前先加密。通过文件格式来区别不同的服务,以便用户知道它是什么(优惠券、打折卡等)。它可能包含一个条码或者其他信息,你可以凭借它获取相应服务或者得到所需物品。
更多关于Pass Kit的信息以及如何将Pass Kit加入到你的应用程序,参考Passbook Programming Guide。
Quick Look Framework
iOS4.0引入了Quick Look框架,应用程序可以用该框架预览无法直接支持查看的文件内容。如果应用程序从网络下载文件或者需处理来源未知的文件,则非常适合使用此框架。因为应用程序只要获得文件后,调用框架提供的视图控制器就可以直接在界面中显示文件的内容。
如需进一步了解该框架的类和方法,请参考Quick Look Framework Reference。
Social Framework
iOS6.0引入了Social框架,提供了简单的接口访问用户社交媒体账户。这个框架替代了iOS5引入的Twitter框架,并且增加了其他社交账户的支持,包括FaceBook和新浪微博服务。用户可以使用这个框架通过用户账号发布新的状态和图片。这个框架和Accounts框架配合使用为用户提供一个单点登录(确保用户账号是允许访问的)。
更多Social框架的信息,参考Social Framework Reference。
Store Kit Framework
iOS3.0引入Store Kit框架,此框架为iOS应用程序内购买内容或服务提供支持。例如,开发者可以利用此框架允许用户解锁应用程序的额外功能。或者假设您是一名游戏开发人员,则可使用此特性向玩家出售附加游戏关卡。在上述的两个情况中,Store Kit框架会处于交易过程和财务相关的事件,包括处理用户通过iTunes Store账号发出的支付请求并且向应用程序提供交易相关信息。
Store Kit框架主要关注交易过程中和财务相关的事务,目的是为了确保交易安全准确。应用程序需要处理交易事务的其他因素,包括购买界面和下载恰当的内容。通过这种任务划分方式,您就有用购买内容的控制权,可以决定希望展示给用户的购买界面以及何时向用户展示这些界面,同时也可以决定和应用程序最匹配的交付机制。
如需进一步了解Store Kit框架的使用方式,参考In-App Purchase Programming Guide和Store Kit Framework Reference。
System Configuration Framework
SystemConfiguration框架可用于确定设备的网络配置。您可以使用该框架判断WiFi或者蜂窝网络连接是否正在使用中,也可以用于判断某个主机服务是否可以使用。
如需进一步了解此框架提供的接口,参考System Configuration Framework Reference。如需通过此框架获取网络信息的示例,参考Reachability示例代码工程。
(转自:http://blog.csdn.net/nsurl/article/details/12706191)