文本文件可以使用文本编辑器打开,图片可以使用图片查看软件打开,这些操作都包含文件类型的判断。文件类型的表示方式很多,本文介绍的 UTI(Uniform Type Identifier)是 Apple 提出的一种表示文件类型的方法。其它的文件类型表示方法还有 OSType、文件名后缀、MIME 等。
一、UTI 的结构
UTI 为表示文件类型提供了统一的方式,它的写法采用 reverse-DNS 格式,如:com.apple.quicktime-movie、public.html、public.jpeg。
UTI 的组织结构类似于网络中域名系统的层次结构。
“public”域表示一些常见的或标准的类型。许多软件能够处理的文件类型都属于“public”域。“public”域是保留的,目前只有 Apple 能够声明该域下的类型。
“dyn”域也是保留的。某个缺少 UTI 信息并且其它类型信息(如文件名后缀、MIME)未知的文件需要获取 UTI 信息时,“dyn”域用来处理该情况。
所有其它的域允许第三方定义,比如企业定义的类型通常在“com”域下,如:com.apple.quicktime-movie。
二、UTI 的“继承”
下面两张图均来自 Apple 官方文档,UTI 的层次结构类似于面向对象编程语言中的“继承“特性。比如,某个文件的类型为“public.image”,该文件类型同样也属于“public.data”。
图 A conformance hierarchy
可以从两个角度对文件类型进行分类。物理特性:文件类型、文件夹类型等。功能特性:图片类型、视频类型等。如下图所示。
图 Physical and functional hierarchies
三、在 iOS 中使用 UTI
MobileCoreServices.framework 中定义了使用 UTI 的一些常量和方法。该框架主要包含 UTCoreTypes.h 和 UTType.h 这两个头文件。
UTCoreTypes.h 头文件中声明了系统定义的常量。如果要表示某个文件的类型,最好使用该文件中声明的常量,而不是直接使用字符串。比如 kUTTypeItem 表示 “public.item”。
UTType.h 头文件中声明了操作 UTI 的方法。一些常用方法如下。
1 | // 1 |