iOS框架结构

整体概述

iOS的框架主要分下面几层:

  • Cocoa Touch Layer
  • Media Layer
  • Core Services Layer
  • Core OS Layer

下面是每一层涉及的框架。先指出有几个关键的框架:

CoreFoundation

结构

这个是iOS框架中从C到objc的关键。它提供了基于C实现的一套语言的接口库,是导出为objc基本框架的基础。最重要的一个事情就是它定义了一种抽象的数据格式,叫“对象(object)”,以及配套的一些函数。此外还有实现了其它一些对象模型。

这些程序接口的设计都是为了易用性和复用行的。一般来说,core foundation可以:

  • 在多种框架中和库中可以分享代码和数据;
  • 让一定程度上不依赖操作系统具有可能性;
  • 支持国际化和unicode字符串;
  • 提供通用API和其他有用的能力,包括插件化的架构、XML属性列表,偏好设置等;

换句话说,在OS X系统中,如果想在不同的框架和库中共享代码和数据,就可以用core foundation的对象作为数据类型,在各自接口中传递;

Core foundation也提供了“toll-free bridging”,可以在Cocoa对象和Core foundation对象直接互相转换;

比如国际化功能,主要是依附CFString来实现。CFString是16位的unicode字符串,它被设计成足够弹性,可以应付百万字节的数据,它的性能C实现的相差无几;

(图片来自官方文档)

内容成员

Core foundation的对象基本上都是“CF”作前缀的。

所有数据类型可以见:Core Foundation Framework Reference

大致上有几种类型:

  • 基本数据类型:CFNumber、CFString、CFSet、CFArray、CFDictionary、CFNull等;
  • 时间类型:CFDate、CFCalendar、CFTimezone等;
  • 网络相关:CFSocket、CFURL、CFReadStream、CFWriteStream
  • 国际化:CFLocate
  • runloop:CFRunLoop
  • 其他一些对象:CFBundle、CFPropertyList等;
  • 还有就是不少对应的工具函数,如:CFRangeMake等

__bridge关键字

__bridge关键字可以用来做类型的强制转换:

  • __bridge: 转换Objective-C指针为Core Foundation类型,但不更换所有者,需要手工调用CFRetain让引用计数加一;
  • __bridge_retained或CFBridgingRetain: 转换Objective-C指针为Core Foundation类型,但更改所有者;这个需要明确调用CFRelease释放所有权;
  • __bridge_transfer或CFBridgingRelease: 修改非Objective-C指针为Objective-C 类型并且改为ARC方式。

小例子

大概风格如下:

    CFStringRef str1 = CFSTR("abcdefg");
    CFStringRef str2 = CFSTR("bcdefgh");
    
    CFComparisonResult compare = CFStringCompare(str1, str2, kCFCompareCaseInsensitive );
    if (compare == kCFCompareEqualTo) {
        NSLog(@"compare equal!");
    } else {
        NSLog(@"compare not equal!");
    }

UIKit

这个是最常见的各种UI控件的集合,全部都是基于Cocoa封装的,普通应用开发,做界面时大部分将会是跟这些类打交道。 所有的类见文档: UIKit Framework Reference

大致包含这么几类:

  • 可视组件:包括表格、工具条、按钮、输入框、弹出框等等,它们都是UIView的子类;
  • 图像相关:包括像UIImage、UIColor、贝塞尔曲线UIBezierPath等;
  • 文本相关:UIFont、UITextRange、UITextChecker(拼写检查)等;
  • 事件相关:UITouch、UIResponder(这个是UIView的基类)、UIEvent、各种手势类;
  • 控制器类:UIViewController、UINavigationController、UISearchDisplayController等;
  • 系统环境相关:UIScreen、UIDevice、UIApplication;
  • 打印相关:UIPrintInfo、UIPrintPaper等;

各个类的关系图如下: (图片来自官方文档)

下面是各层的所有框架列表: (TODO:未完待续)

Cocoa Touch Layer

  • UIKit:常用的各种UI控件;
  • AddressBookUI
  • EventKitUI
  • GameKit
  • MapKit:底图服务控件;
  • MessageUI
  • Twitter
  • iAd

Media Layer

  • AVFoundation
  • AssetsLibrary
  • AudioToolbox
  • AudioUnit
  • CoreAudio
  • CoreGraphics
  • CoreImage
  • CoreMIDI
  • CoreText
  • CoreVideo
  • GLKit
  • GameController
  • ImageIO
  • MediaAccessibility
  • MediaPlayer
  • OpenAL
  • OpenGLES
  • QuartzCore
  • SpriteKit:iOS7新出的游戏小框架

Core Services Layer

  • Accounts
  • AdSupport
  • AddressBook
  • CFNetwork:对基于CFStream和CFSocoket的抽象,包括CFHttp和CFFtp;
  • CoreData:持久化框架;
  • CoreFoundation
  • CoreLocation
  • CoreMedia
  • CoreMotion
  • CoreTelephony
  • EventKit
  • Foundation
  • JavaScriptCore
  • MobileCoreServices
  • MultipeerConnectivity
  • NewsstandKit
  • PassKit
  • QuickLook
  • Social
  • StoreKit
  • SystemConfiguration
  • UIAutomation

Core OS Layer

  • Accelerate
  • CoreBluetooth
  • ExternalAccessory
  • Security
  • System